Several optimizations; bug fix for swing

Jonathan Bell [2012-12-13 23:31:31]
Several optimizations; bug fix for swing
Filename
Code/ChroniclerJ/nondeterministic-methods.txt
Code/ChroniclerJ/src/com/rits/cloning/Cloner.java
Code/ChroniclerJ/src/com/rits/cloning/FastClonerArrayList.java
Code/ChroniclerJ/src/com/rits/cloning/FastClonerConcurrentHashMap.java
Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashMap.java
Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashSet.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackInvocation.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackRegistry.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/ChroniclerJExportRunner.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CloningUtils.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Constants.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Instrumenter.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/bench/ChroniclerJLogExplorer.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayClassVisitor.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayMethodVisitor.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayRunner.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayUtils.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/Replayer.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CallbackLoggingMethodVisitor.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CloningAdviceAdapter.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingClassVisitor.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingMethodVisitor.java
Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/xstream/CatchClassErrorFieldDictionary.java
diff --git a/Code/ChroniclerJ/nondeterministic-methods.txt b/Code/ChroniclerJ/nondeterministic-methods.txt
index d2c068f..a2f0537 100644
--- a/Code/ChroniclerJ/nondeterministic-methods.txt
+++ b/Code/ChroniclerJ/nondeterministic-methods.txt
@@ -8529,7 +8529,6 @@ com/sun/source/tree/TreeVisitor.visitErroneous:(Lcom/sun/source/tree/ErroneousTr
 javax/swing/text/html/StyleSheet$CssParser.addSelector:()V
 com/sun/xml/internal/rngom/parse/host/NameClassBuilderHost.makeAnyName:(Lcom/sun/xml/internal/rngom/ast/om/Location;Lcom/sun/xml/internal/rngom/ast/builder/Annotations;)Lcom/sun/xml/internal/rngom/ast/om/ParsedNameClass;
 java/net/URI.<init>:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-java/util/Locale.getLanguage:()Ljava/lang/String;
 javax/swing/tree/FixedHeightLayoutCache$VisibleFHTreeStateNodeEnumeration.findNextValidParent:()Z
 sun/awt/image/ToolkitImage.setProperties:(Ljava/util/Hashtable;)V
 com/sun/tools/example/debug/bdi/ExecutionManager.notifyInterrupted:()V
@@ -11081,7 +11080,6 @@ java/security/cert/X509CertSelector.match:(Ljava/security/cert/Certificate;)Z
 java/lang/management/RuntimeMXBean.getSpecVendor:()Ljava/lang/String;
 com/sun/tools/internal/ws/resources/ModelerMessages.localizableWSDLMODELER_WARNING_NO_SERVICE_DEFINITIONS_FOUND:()Lcom/sun/xml/internal/ws/util/localization/Localizable;
 com/sun/xml/internal/messaging/saaj/soap/SOAPPartImpl$1.getName:()Ljava/lang/String;
-org/xml/sax/Attributes.getValue:(Ljava/lang/String;)Ljava/lang/String;
 com/sun/corba/se/spi/activation/EndPointInfoHolder._type:()Lorg/omg/CORBA/TypeCode;
 com/sun/tools/javac/parser/Scanner.nextToken:()V
 com/sun/xml/internal/ws/api/addressing/WSEndpointReference$3.writeStartElement:(Ljava/lang/String;Ljava/lang/String;)V
@@ -17017,7 +17015,6 @@ com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.addClassLoader:(Ljavax/mana
 org/xml/sax/ext/Attributes2Impl.removeAttribute:(I)V
 java/awt/JobAttributes$SidesType.<clinit>:()V
 com/sun/javadoc/ClassDoc.position:()Lcom/sun/javadoc/SourcePosition;
-java/util/logging/Logger.isLoggable:(Ljava/util/logging/Level;)Z
 javax/swing/plaf/synth/SynthInternalFrameUI.uninstallDefaults:()V
 sun/security/x509/CRLExtensions.equals:(Ljava/lang/Object;)Z
 com/sun/xml/internal/ws/api/message/Packet.getContentNegotiationString:()Ljava/lang/String;
@@ -18274,7 +18271,6 @@ org/omg/CORBA/LongSeqHolder._read:(Lorg/omg/CORBA/portable/InputStream;)V
 javax/sound/sampled/EnumControl.toString:()Ljava/lang/String;
 sun/java2d/loops/CompositeType.<init>:(Lsun/java2d/loops/CompositeType;Ljava/lang/String;)V
 javax/management/ObjectName.isPropertyValuePattern:(Ljava/lang/String;)Z
-java/io/CharArrayWriter.append:(Ljava/lang/CharSequence;II)Ljava/io/Writer;
 com/sun/tools/javac/code/Type$ForAll.getKind:()Ljavax/lang/model/type/TypeKind;
 java/awt/dnd/DragGestureRecognizer.appendEvent:(Ljava/awt/event/InputEvent;)V
 javax/activation/MimeTypeParameterList.parse:(Ljava/lang/String;)V
@@ -19924,7 +19920,6 @@ com/sun/corba/se/impl/encoding/CodeSetComponentInfo$CodeSetComponent.equals:(Lja
 com/sun/xml/internal/ws/api/DistributedPropertySet.supports:(Ljava/lang/Object;)Z
 sun/org/mozilla/javascript/internal/ImporterTopLevel.js_construct:(Lsun/org/mozilla/javascript/internal/Scriptable;[Ljava/lang/Object;)Ljava/lang/Object;
 sun/java2d/loops/GraphicsPrimitive.getTraceOutputFile:()Ljava/io/PrintStream;
-javax/xml/bind/JAXBContext.newInstance:(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/bind/JAXBContext;
 java/util/Scanner.delimiter:()Ljava/util/regex/Pattern;
 java/awt/Component$FlipBufferStrategy.getDrawGraphics:()Ljava/awt/Graphics;
 java/awt/Container.preProcessKeyEvent:(Ljava/awt/event/KeyEvent;)V
@@ -21130,7 +21125,6 @@ javax/swing/text/StyleContext.<init>:()V
 java/awt/Container.recursiveApplyCurrentShape:(I)V
 com/sun/java/util/jar/pack/BandStructure.shortCodeHeader_handler_count:(I)I
 sun/misc/Unsafe.putByte:(JB)V
-javax/xml/bind/JAXBContext.newInstance:([Ljava/lang/Class;Ljava/util/Map;)Ljavax/xml/bind/JAXBContext;
 javax/swing/text/AbstractDocument$UndoRedoDocumentEvent.<init>:(Ljavax/swing/text/AbstractDocument;Ljavax/swing/text/AbstractDocument$DefaultDocumentEvent;Z)V
 javax/imageio/spi/ServiceRegistry.deregisterServiceProvider:(Ljava/lang/Object;)V
 com/sun/org/apache/bcel/internal/classfile/LineNumberTable.getLineNumberTable:()[Lcom/sun/org/apache/bcel/internal/classfile/LineNumber;
@@ -21153,7 +21147,6 @@ com/sun/tools/jdi/ClassTypeImpl$2.send:()Lcom/sun/tools/jdi/PacketStream;
 javax/swing/JComponent.processInputMethodEvent:(Ljava/awt/event/InputMethodEvent;)V
 sun/awt/SunToolkit.getSystemEventQueueImplPP:(Lsun/awt/AppContext;)Ljava/awt/EventQueue;
 com/sun/org/apache/xerces/internal/xs/ElementPSVI.getValidationContext:()Ljava/lang/String;
-java/io/CharArrayWriter.append:(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
 com/sun/tools/javah/TypeSignature.getComponentType:(Ljava/lang/String;)Ljava/lang/String;
 javax/imageio/spi/ImageReaderWriterSpi.getNativeStreamMetadataFormatName:()Ljava/lang/String;
 com/sun/corba/se/impl/logging/ORBUtilSystemException.cnfeReadClass:(Lorg/omg/CORBA/CompletionStatus;Ljava/lang/Object;)Lorg/omg/CORBA/MARSHAL;
@@ -26424,7 +26417,6 @@ com/sun/xml/internal/bind/v2/model/impl/PropertySeed.hasAnnotation:(Ljava/lang/C
 javax/swing/text/html/HTMLDocument$HTMLReader$ParagraphAction.end:(Ljavax/swing/text/html/HTML$Tag;)V
 com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.makeImmutable:()V
 org/omg/PortableServer/RequestProcessingPolicyOperations.value:()Lorg/omg/PortableServer/RequestProcessingPolicyValue;
-java/io/CharArrayWriter.append:(C)Ljava/io/Writer;
 com/sun/tools/internal/ws/resources/WebserviceapMessages.WEBSERVICEAP_ERROR:(Ljava/lang/Object;)Ljava/lang/String;
 com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.checkDuplicatesNS:()Lcom/sun/org/apache/xerces/internal/xni/QName;
 javax/swing/OverlayLayout.getLayoutAlignmentX:(Ljava/awt/Container;)F
@@ -28626,7 +28618,6 @@ java/net/Inet6Address.isAnyLocalAddress:()Z
 sun/font/FontLineMetrics.getBaselineOffsets:()[F
 com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.getDocument:()I
 com/sun/org/apache/xalan/internal/xsltc/compiler/When.getTest:()Lcom/sun/org/apache/xalan/internal/xsltc/compiler/Expression;
-org/xml/sax/Attributes.getURI:(I)Ljava/lang/String;
 com/sun/tools/corba/se/idl/SymtabEntry.enteringInclude:()V
 com/sun/xml/internal/xsom/impl/RestrictionSimpleTypeImpl.getPrimitiveType:()Lcom/sun/xml/internal/xsom/XSSimpleType;
 com/sun/xml/internal/bind/v2/runtime/reflect/Lister$1.iterator:(Ljava/lang/Object;Lcom/sun/xml/internal/bind/v2/runtime/XMLSerializer;)Lcom/sun/xml/internal/bind/v2/runtime/reflect/ListIterator;
@@ -28866,7 +28857,6 @@ sun/security/rsa/RSAPrivateCrtKeyImpl.<init>:([B)V
 sun/security/krb5/KrbAsReq.<init>:([CZILjava/lang/String;[BLsun/security/krb5/internal/KDCOptions;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;[ILsun/security/krb5/internal/HostAddresses;[Lsun/security/krb5/internal/Ticket;)V
 com/sun/org/apache/xerces/internal/dom/NodeImpl.cloneNode:(Z)Lorg/w3c/dom/Node;
 com/sun/org/apache/xerces/internal/util/XMLDocumentFilterImpl.startElement:(Lcom/sun/org/apache/xerces/internal/xni/QName;Lcom/sun/org/apache/xerces/internal/xni/XMLAttributes;Lcom/sun/org/apache/xerces/internal/xni/Augmentations;)V
-java/beans/PropertyDescriptor.getPropertyType:()Ljava/lang/Class;
 com/sun/jmx/snmp/daemon/SnmpAdaptorServer.snmpV2Trap:(Ljava/net/InetAddress;Ljava/lang/String;Lcom/sun/jmx/snmp/SnmpOid;Lcom/sun/jmx/snmp/SnmpVarBindList;Lcom/sun/jmx/snmp/SnmpTimeticks;)V
 com/sun/org/apache/xml/internal/serializer/ToStream.init:(Ljava/io/Writer;Ljava/util/Properties;ZZ)V
 javax/swing/plaf/basic/BasicComboPopup.createPropertyChangeListener:()Ljava/beans/PropertyChangeListener;
@@ -29672,7 +29662,6 @@ java/nio/channels/spi/AbstractInterruptibleChannel.close:()V
 sun/org/mozilla/javascript/internal/NativeWith.put:(Ljava/lang/String;Lsun/org/mozilla/javascript/internal/Scriptable;Ljava/lang/Object;)V
 com/sun/tools/javac/code/Symbol$DelegatedSymbol.isLocal:()Z
 java/awt/event/AdjustmentListener.adjustmentValueChanged:(Ljava/awt/event/AdjustmentEvent;)V
-javax/xml/bind/JAXBContext.newInstance:([Ljava/lang/Class;)Ljavax/xml/bind/JAXBContext;
 sun/reflect/UnsafeDoubleFieldAccessorImpl.getDouble:(Ljava/lang/Object;)D
 javax/lang/model/type/DeclaredType.getTypeArguments:()Ljava/util/List;
 com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.saveCookieAsNeeded:()V
@@ -32777,7 +32766,6 @@ sun/awt/SunToolkit.awtLock:()V
 sun/java2d/pipe/RenderBuffer.put:([S)Lsun/java2d/pipe/RenderBuffer;
 com/sun/org/apache/bcel/internal/util/ClassPath$ClassFile.getInputStream:()Ljava/io/InputStream;
 sun/security/validator/EndEntityChecker.checkEKU:(Ljava/security/cert/X509Certificate;Ljava/util/Set;Ljava/lang/String;)Z
-java/beans/PropertyDescriptor.getWriteMethod:()Ljava/lang/reflect/Method;
 com/sun/corba/se/spi/orbutil/fsm/NegateGuard.evaluate:(Lcom/sun/corba/se/spi/orbutil/fsm/FSM;Lcom/sun/corba/se/spi/orbutil/fsm/Input;)Lcom/sun/corba/se/spi/orbutil/fsm/Guard$Result;
 javax/swing/text/TableView.getColumnCount:()I
 sun/jvmstat/perfdata/monitor/protocol/local/MonitoredHostProvider.access$300:(Lsun/jvmstat/perfdata/monitor/protocol/local/MonitoredHostProvider;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;)V
@@ -35221,7 +35209,6 @@ javax/swing/text/StringContent$StickyPosition.getOffset:()I
 com/sun/tools/javac/util/DefaultFileManager$ZipFileObject.getLastModified:()J
 javax/swing/JTree.getExpandsSelectedPaths:()Z
 com/sun/rowset/CachedRowSetImpl.setDouble:(Ljava/lang/String;D)V
-java/io/CharArrayWriter.append:(Ljava/lang/CharSequence;)Ljava/io/Writer;
 com/sun/tools/corba/se/idl/constExpr/Or.evaluate:()Ljava/lang/Object;
 java/awt/dnd/DropTarget.<init>:(Ljava/awt/Component;ILjava/awt/dnd/DropTargetListener;Z)V
 javax/management/monitor/StringMonitor.<init>:()V
@@ -36103,7 +36090,6 @@ java/util/TreeMap.successor:(Ljava/util/TreeMap$Entry;)Ljava/util/TreeMap$Entry;
 com/sun/java/swing/plaf/windows/WindowsFileChooserUI.createDirectoryComboBoxRenderer:(Ljavax/swing/JFileChooser;)Lcom/sun/java/swing/plaf/windows/WindowsFileChooserUI$DirectoryComboBoxRenderer;
 javax/management/remote/rmi/RMIConnector.access$100:(Ljavax/management/remote/rmi/RMIConnector;)Ljava/lang/ClassLoader;
 com/sun/tools/corba/se/idl/toJavaPortable/DefaultFactory.closeStream:()V
-java/beans/PropertyDescriptor.getWriteMethod0:()Ljava/lang/reflect/Method;
 com/sun/source/util/JavacTask.generate:()Ljava/lang/Iterable;
 javax/swing/ListSelectionModel.addListSelectionListener:(Ljavax/swing/event/ListSelectionListener;)V
 com/sun/tools/example/debug/gui/CurrentFrameChangedEvent.getThread:()Lcom/sun/jdi/ThreadReference;
@@ -38315,7 +38301,6 @@ javax/swing/plaf/metal/MetalTheme.getSubTextFont:()Ljavax/swing/plaf/FontUIResou
 javax/swing/text/DefaultCaret.getSystemSelection:()Ljava/awt/datatransfer/Clipboard;
 com/sun/tools/internal/ws/processor/generator/ServiceGenerator.writeDefaultGetPort:(Lcom/sun/tools/internal/ws/processor/model/Port;Lcom/sun/codemodel/internal/JType;Lcom/sun/codemodel/internal/JDefinedClass;)V
 com/sun/jndi/ldap/LdapClient.removeUnsolicited:(Lcom/sun/jndi/ldap/LdapCtx;)V
-org/w3c/dom/Text.getData:()Ljava/lang/String;
 com/sun/java/swing/plaf/gtk/GTKStyle$GTKStockIcon.getIcon:(Ljavax/swing/plaf/synth/SynthContext;)Ljavax/swing/Icon;
 com/sun/corba/se/impl/logging/POASystemException.bootstrapError:(Lorg/omg/CORBA/CompletionStatus;)Lorg/omg/CORBA/INITIALIZE;
 javax/lang/model/element/TypeParameterElement.getKind:()Ljavax/lang/model/element/ElementKind;
@@ -41773,7 +41758,6 @@ com/sun/xml/internal/ws/resources/SoapMessages.localizableSOAP_MSG_CREATE_ERR:(L
 com/sun/java/swing/plaf/motif/MotifDesktopIconUI$DesktopIconActionListener.actionPerformed:(Ljava/awt/event/ActionEvent;)V
 java/awt/Button.removeActionListener:(Ljava/awt/event/ActionListener;)V
 com/sun/corba/se/impl/logging/ORBUtilSystemException.badCustomIiopPrimaryToContactInfo:(Ljava/lang/Throwable;Ljava/lang/Object;)Lorg/omg/CORBA/DATA_CONVERSION;
-java/nio/channels/Selector.wakeup:()Ljava/nio/channels/Selector;
 javax/xml/datatype/Duration.compare:(Ljavax/xml/datatype/Duration;)I
 com/sun/tools/javah/oldjavah/OldHeaders.getCType:(Lsun/tools/java/Type;I)Ljava/lang/String;
 java/lang/UNIXProcess.access$800:(Ljava/lang/UNIXProcess;)I
@@ -45534,7 +45518,6 @@ java/awt/TrayIcon.removeNotify:()V
 com/sun/tools/javadoc/ParameterImpl.name:()Ljava/lang/String;
 com/sun/tools/internal/jxc/model/nav/APTNavigator.sort:(Ljava/util/List;)Ljava/util/List;
 com/sun/java/swing/plaf/gtk/GTKFileChooserUI$3.<init>:(Lcom/sun/java/swing/plaf/gtk/GTKFileChooserUI;)V
-java/io/CharArrayWriter.write:(Ljava/lang/String;II)V
 javax/imageio/ImageTypeSpecifier.createBufferedImage:(II)Ljava/awt/image/BufferedImage;
 com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream.write_wstring:(Ljava/lang/String;)V
 com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralAttribute.contextDependent:()Z
@@ -45634,7 +45617,6 @@ javax/swing/table/DefaultTableCellRenderer.setBorder:(Ljavax/swing/border/Border
 com/sun/tools/javac/comp/Attr.litType:(I)Lcom/sun/tools/javac/code/Type;
 com/sun/org/apache/xml/internal/serializer/SerializerBase.getDoctypePublic:()Ljava/lang/String;
 com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.acceptNode:(ILcom/sun/org/apache/xpath/internal/XPathContext;)S
-java/util/logging/Logger.getLogger:(Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger;
 javax/swing/plaf/metal/MetalCheckBoxUI.installDefaults:(Ljavax/swing/AbstractButton;)V
 com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.addXmlAttributesSubtree:(Lorg/w3c/dom/Element;Ljava/util/SortedSet;)V
 com/sun/corba/se/impl/io/IIOPInputStream.readLong:()J
@@ -48559,7 +48541,6 @@ com/sun/corba/se/impl/logging/InterceptorsSystemException.ioexceptionDuringCance
 com/sun/codemodel/internal/JVar.type:(Lcom/sun/codemodel/internal/JType;)Lcom/sun/codemodel/internal/JType;
 javax/swing/plaf/basic/BasicButtonUI.createUI:(Ljavax/swing/JComponent;)Ljavax/swing/plaf/ComponentUI;
 com/sun/tools/javac/main/JavacOption$HiddenOption.<init>:(Lcom/sun/tools/javac/main/OptionName;)V
-java/io/CharArrayWriter.write:([CII)V
 com/sun/corba/se/impl/dynamicany/DynFixedImpl.<init>:(Lcom/sun/corba/se/spi/orb/ORB;Lorg/omg/CORBA/TypeCode;)V
 com/sun/tools/hat/internal/model/JavaClass.getSnapshot:()Lcom/sun/tools/hat/internal/model/Snapshot;
 sun/audio/AudioDevice.openChannel:(Ljava/io/InputStream;)V
@@ -49329,7 +49310,6 @@ com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$Title$2.mouseClicked:(
 javax/sound/sampled/AudioInputStream.read:([B)I
 com/sun/tools/example/debug/gui/CommandInterpreter.commandUse:(Ljava/util/StringTokenizer;)V
 com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOM.resizeRelations:(I)V
-javax/xml/bind/JAXBContext.createMarshaller:()Ljavax/xml/bind/Marshaller;
 javax/swing/plaf/basic/BasicTreeUI.isLocationInExpandControl:(Ljavax/swing/tree/TreePath;II)Z
 com/sun/java/swing/plaf/windows/WindowsMenuItemUI.paintBackground:(Lcom/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor;Ljava/awt/Graphics;Ljavax/swing/JMenuItem;Ljava/awt/Color;)V
 com/sun/corba/se/impl/dynamicany/DynAnyBasicImpl.insert_char:(C)V
@@ -52013,7 +51993,6 @@ com/sun/xml/internal/ws/resources/WsservletMessages.ERROR_SERVLET_INIT_CONFIG_FI
 com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.display:(I)V
 com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar$XSAnyType.getParticle:()Lcom/sun/org/apache/xerces/internal/xs/XSParticle;
 javax/swing/TransferHandler$SwingDragGestureRecognizer.<init>:(Ljava/awt/dnd/DragGestureListener;)V
-java/awt/EventQueue.invokeLater:(Ljava/lang/Runnable;)V
 com/sun/tools/javadoc/TagImpl.firstSentenceTags:()[Lcom/sun/javadoc/Tag;
 com/sun/java/swing/plaf/nimbus/SynthPainterImpl.paintTabbedPaneBorder:(Ljavax/swing/plaf/synth/SynthContext;Ljava/awt/Graphics;IIII)V
 com/sun/tools/javac/code/Types.closure:(Lcom/sun/tools/javac/code/Type;)Lcom/sun/tools/javac/util/List;
@@ -53371,7 +53350,6 @@ com/sun/tools/internal/xjc/reader/xmlschema/ClassSelector.access$300:(Lcom/sun/t
 com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.runInterceptors:(Lcom/sun/corba/se/spi/protocol/CorbaMessageMediator;Lcom/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage;)V
 javax/security/auth/kerberos/KerberosPrincipal.<init>:(Ljava/lang/String;I)V
 sun/rmi/transport/LiveRef.getServerSocketFactory:()Ljava/rmi/server/RMIServerSocketFactory;
-java/beans/Introspector.getBeanInfo:(Ljava/lang/Class;Ljava/lang/Class;I)Ljava/beans/BeanInfo;
 java/net/Proxy.<init>:()V
 com/sun/xml/internal/ws/resources/EncodingMessages.localizableFAILED_TO_READ_RESPONSE:(Ljava/lang/Object;)Lcom/sun/xml/internal/ws/util/localization/Localizable;
 sun/net/www/protocol/jar/JarURLConnection.access$000:(Lsun/net/www/protocol/jar/JarURLConnection;)Ljava/util/jar/JarFile;
@@ -57514,7 +57492,6 @@ sun/reflect/UnsafeBooleanFieldAccessorImpl.setBoolean:(Ljava/lang/Object;Z)V
 sun/org/mozilla/javascript/internal/Interpreter.<init>:()V
 com/sun/tools/internal/ws/processor/modeler/annotation/AnnotationProcessorContext$SEIContext.setResWrapperOperation:(Lcom/sun/mirror/declaration/MethodDeclaration;Lcom/sun/tools/internal/ws/processor/modeler/annotation/WrapperInfo;)V
 com/sun/tools/internal/xjc/generator/bean/field/AbstractField.annotateAttribute:(Lcom/sun/codemodel/internal/JAnnotatable;)V
-java/beans/Introspector.getBeanInfo:(Ljava/lang/Class;)Ljava/beans/BeanInfo;
 com/sun/tools/example/debug/tty/Commands$AsyncExecution.<init>:(Lcom/sun/tools/example/debug/tty/Commands;)V
 com/sun/servicetag/Util.getWindowsStClientFile:(Z)Ljava/io/File;
 com/sun/corba/se/impl/ior/iiop/IIOPAddressImpl.hashCode:()I
@@ -58686,7 +58663,6 @@ com/sun/org/apache/bcel/internal/generic/InstructionList.insert:(Lcom/sun/org/ap
 com/sun/xml/internal/rngom/parse/compact/CompactSyntax.jj_3R_33:()Z
 sun/tools/jstat/Parser.parseOptions:()Ljava/util/Set;
 com/sun/rowset/CachedRowSetImpl.updateAsciiStream:(ILjava/io/InputStream;)V
-java/beans/PropertyDescriptor.getPropertyEditorClass:()Ljava/lang/Class;
 javax/swing/JList$4.getSize:()I
 org/omg/DynamicAny/_DynEnumStub.insert_typecode:(Lorg/omg/CORBA/TypeCode;)V
 com/sun/java/swing/plaf/motif/MotifTextUI$MotifCaret.focusLost:(Ljava/awt/event/FocusEvent;)V
@@ -60947,7 +60923,6 @@ com/sun/corba/se/impl/ior/StubIORImpl.<init>:(Lorg/omg/CORBA/Object;)V
 java/awt/Window.setLocationByPlatform:(Z)V
 com/sun/tools/internal/jxc/gen/config/Config.accepted:()Z
 java/awt/event/KeyEvent.<init>:(Ljava/awt/Component;IJIICIZ)V
-java/beans/BeanInfo.getPropertyDescriptors:()[Ljava/beans/PropertyDescriptor;
 com/sun/tools/javac/tree/JCTree$JCArrayAccess.accept:(Lcom/sun/source/tree/TreeVisitor;Ljava/lang/Object;)Ljava/lang/Object;
 javax/swing/plaf/basic/BasicComboPopup.computePopupBounds:(IIII)Ljava/awt/Rectangle;
 java/util/TreeMap$NavigableSubMap.ceilingKey:(Ljava/lang/Object;)Ljava/lang/Object;
@@ -61205,7 +61180,6 @@ sun/awt/im/CompositionAreaHandler.caretPositionChanged:(Ljava/awt/event/InputMet
 java/security/Provider$ServiceKey.matches:(Ljava/lang/String;Ljava/lang/String;)Z
 com/sun/org/apache/xerces/internal/dom/NodeImpl.getLength:()I
 java/rmi/server/RemoteObject.readObject:(Ljava/io/ObjectInputStream;)V
-org/xml/sax/Attributes.getLength:()I
 com/sun/xml/internal/xsom/impl/parser/state/complexType_complexContent_body.enterElement:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V
 com/sun/media/sound/DirectAudioDevice.nService:(JZ)V
 javax/swing/JTabbedPane.add:(Ljava/awt/Component;)Ljava/awt/Component;
@@ -61522,7 +61496,6 @@ javax/swing/plaf/basic/BasicToolBarUI.canDock:(Ljava/awt/Component;Ljava/awt/Poi
 com/sun/xml/internal/messaging/saaj/soap/ver1_1/FaultElement1_1Impl.<init>:(Lcom/sun/xml/internal/messaging/saaj/soap/SOAPDocumentImpl;Ljava/lang/String;)V
 com/sun/corba/se/impl/ior/iiop/IIOPProfileTemplateImpl.getGIOPVersion:()Lcom/sun/corba/se/spi/ior/iiop/GIOPVersion;
 sun/java2d/pipe/BufferedRenderPipe.fillPath:(Lsun/java2d/SunGraphics2D;Ljava/awt/geom/Path2D$Float;II)V
-org/xml/sax/Attributes.getValue:(I)Ljava/lang/String;
 com/sun/xml/internal/bind/v2/runtime/reflect/Lister.startPacking:(Ljava/lang/Object;Lcom/sun/xml/internal/bind/v2/runtime/reflect/Accessor;)Ljava/lang/Object;
 com/sun/corba/se/spi/servicecontext/UEInfoServiceContext.writeData:(Lorg/omg/CORBA_2_3/portable/OutputStream;)V
 com/sun/corba/se/impl/ior/ObjectReferenceFactoryImpl._write:(Lorg/omg/CORBA/portable/OutputStream;)V
@@ -65224,7 +65197,6 @@ javax/swing/tree/VariableHeightLayoutCache.setRowHeight:(I)V
 javax/swing/JTextField$NotifyAction.<init>:()V
 java/awt/MenuComponent$AccessibleAWTMenuComponent.getAccessibleName:()Ljava/lang/String;
 javax/swing/DefaultButtonModel.getGroup:()Ljavax/swing/ButtonGroup;
-org/xml/sax/Attributes.getQName:(I)Ljava/lang/String;
 sun/net/www/protocol/http/HttpURLConnection$StreamingOutputStream.write:([BII)V
 com/sun/tools/example/debug/expr/ExpressionParser.jj_3R_128:()Z
 sun/net/www/protocol/http/AuthenticationInfo.getServerAuth:(Ljava/lang/String;)Lsun/net/www/protocol/http/AuthenticationInfo;
@@ -66013,7 +65985,6 @@ javax/swing/JTabbedPane$Page.isVisible:()Z
 sun/reflect/UnsafeStaticDoubleFieldAccessorImpl.setShort:(Ljava/lang/Object;S)V
 com/sun/tools/internal/xjc/reader/xmlschema/ClassSelector.queueBuild:(Lcom/sun/xml/internal/xsom/XSComponent;Lcom/sun/tools/internal/xjc/model/CElement;)V
 sun/security/x509/CertificatePolicySet.encode:(Lsun/security/util/DerOutputStream;)V
-java/io/CharArrayWriter.size:()I
 com/sun/xml/internal/rngom/digested/DPatternVisitor.onOneOrMore:(Lcom/sun/xml/internal/rngom/digested/DOneOrMorePattern;)Ljava/lang/Object;
 com/sun/tools/javac/processing/JavacProcessingEnvironment.warnIfUnmatchedOptions:()V
 java/rmi/server/RemoteRef.invoke:(Ljava/rmi/Remote;Ljava/lang/reflect/Method;[Ljava/lang/Object;J)Ljava/lang/Object;
@@ -66166,7 +66137,6 @@ javax/swing/JTable.<init>:()V
 com/sun/mirror/util/DeclarationScanner.visitTypeDeclaration:(Lcom/sun/mirror/declaration/TypeDeclaration;)V
 com/sun/tools/corba/se/idl/StringEntry.<init>:(Lcom/sun/tools/corba/se/idl/SymtabEntry;Lcom/sun/tools/corba/se/idl/IDLID;)V
 com/sun/xml/internal/stream/dtd/nonvalidating/DTDGrammar.setAttributeDecl:(IILcom/sun/xml/internal/stream/dtd/nonvalidating/XMLAttributeDecl;)V
-java/beans/PropertyEditorManager.findEditor:(Ljava/lang/Class;)Ljava/beans/PropertyEditor;
 com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.access$300:(Lcom/sun/java/swing/plaf/windows/WindowsInternalFrameUI;)Ljavax/swing/JInternalFrame;
 com/sun/java/swing/plaf/nimbus/InnerShadowEffect.<init>:()V
 com/sun/org/apache/xerces/internal/parsers/XIncludeParserConfiguration.<init>:(Lcom/sun/org/apache/xerces/internal/util/SymbolTable;Lcom/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarPool;Lcom/sun/org/apache/xerces/internal/xni/parser/XMLComponentManager;)V
@@ -66281,7 +66251,6 @@ com/sun/org/apache/xml/internal/utils/XMLString.concat:(Ljava/lang/String;)Lcom/
 javax/swing/plaf/synth/SynthParser$LazyImageIcon.paintIcon:(Ljava/awt/Component;Ljava/awt/Graphics;II)V
 com/sun/tools/corba/se/idl/SymtabEntry.generator:()Lcom/sun/tools/corba/se/idl/Generator;
 com/sun/corba/se/impl/logging/POASystemException.orbdError:()Lorg/omg/CORBA/INITIALIZE;
-java/io/CharArrayWriter.append:(C)Ljava/lang/Appendable;
 javax/swing/text/FlowView$FlowStrategy.insertUpdate:(Ljavax/swing/text/FlowView;Ljavax/swing/event/DocumentEvent;Ljava/awt/Rectangle;)V
 org/omg/DynamicAny/_DynEnumStub.copy:()Lorg/omg/DynamicAny/DynAny;
 com/sun/tools/internal/ws/resources/ModelerMessages.WSDLMODELER_WARNING_NO_SERVICE_DEFINITIONS_FOUND:()Ljava/lang/String;
@@ -66602,7 +66571,6 @@ com/sun/xml/internal/stream/XMLInputFactoryImpl.createXMLEventReader:(Ljavax/xml
 com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.getName:(I)Ljava/lang/String;
 com/sun/corba/se/impl/oa/poa/POAImpl.get_servant_manager:()Lorg/omg/PortableServer/ServantManager;
 com/sun/org/apache/xml/internal/serializer/EncodingInfo$EncodingImpl.isInEncoding:(C)Z
-java/io/CharArrayWriter.append:(Ljava/lang/CharSequence;)Ljava/io/CharArrayWriter;
 javax/swing/text/PlainView.lineToRect:(Ljava/awt/Shape;I)Ljava/awt/Rectangle;
 com/sun/tools/corba/se/idl/Parser.unqualifiedEntryWMod:(Ljava/lang/String;Lcom/sun/tools/corba/se/idl/SymtabEntry;)Lcom/sun/tools/corba/se/idl/SymtabEntry;
 javax/swing/plaf/synth/SynthEditorPaneUI.uninstallDefaults:()V
@@ -68695,7 +68663,6 @@ com/sun/tools/javac/jvm/Target.interfaceObjectOverridesBinaryCompatibility:()Z
 java/awt/Window.resetGC:()V
 com/sun/xml/internal/ws/resources/DispatchMessages.localizableINVALID_URI:(Ljava/lang/Object;)Lcom/sun/xml/internal/ws/util/localization/Localizable;
 com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.processBacksolidus_b:()Lcom/sun/org/apache/xerces/internal/impl/xpath/regex/Token;
-java/io/CharArrayWriter.append:(C)Ljava/io/CharArrayWriter;
 sun/nio/ch/SourceChannelImpl.<init>:(Ljava/nio/channels/spi/SelectorProvider;Ljava/io/FileDescriptor;)V
 com/sun/tools/jdi/LineInfo.liSourcePath:()Ljava/lang/String;
 com/sun/org/apache/xalan/internal/xsltc/trax/XSLTCSource.setSystemId:(Ljava/lang/String;)V
@@ -69100,7 +69067,6 @@ java/nio/CharBuffer.hashCode:()I
 com/sun/xml/internal/ws/message/stream/StreamMessage.getAttachments:()Lcom/sun/xml/internal/ws/api/message/AttachmentSet;
 com/sun/tools/internal/xjc/api/impl/s2j/PropertyImpl.type:()Lcom/sun/codemodel/internal/JType;
 javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon.paintIcon:(Ljava/awt/Component;Ljava/awt/Graphics;II)V
-java/io/CharArrayWriter.append:(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;
 sun/rmi/transport/Transport.currentTransport:()Lsun/rmi/transport/Transport;
 com/sun/xml/internal/ws/client/PortInfo.getOwner:()Lcom/sun/xml/internal/ws/api/WSService;
 sun/util/calendar/AbstractCalendar.isLeapYear:(Lsun/util/calendar/CalendarDate;)Z
@@ -70772,7 +70738,6 @@ sun/rmi/rmic/iiop/IDLGenerator.writeSpecial:(Lsun/rmi/rmic/iiop/Type;Lsun/rmi/rm
 javax/swing/plaf/basic/BasicTreeUI.isRootVisible:()Z
 com/sun/java/util/jar/pack/Instruction.at:([BI)Lcom/sun/java/util/jar/pack/Instruction;
 javax/swing/plaf/basic/BasicToolBarUI.getRolloverBorder:(Ljavax/swing/AbstractButton;)Ljavax/swing/border/Border;
-java/io/CharArrayWriter.toCharArray:()[C
 org/omg/PortableInterceptor/ObjectReferenceTemplate.orb_id:()Ljava/lang/String;
 javax/swing/JTree$TreeModelHandler.treeStructureChanged:(Ljavax/swing/event/TreeModelEvent;)V
 com/sun/xml/internal/rngom/binary/OneOrMorePattern.checkRecursion:(I)V
@@ -73068,7 +73033,6 @@ java/awt/List.preferredSize:()Ljava/awt/Dimension;
 com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.consoleOutput:(Ljava/lang/String;)V
 com/sun/tools/javac/comp/Attr.visitIf:(Lcom/sun/tools/javac/tree/JCTree$JCIf;)V
 javax/swing/JCheckBox.updateUI:()V
-java/io/PrintWriter.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
 com/sun/org/apache/xerces/internal/impl/XMLEntityManager.getLiteralSystemId:()Ljava/lang/String;
 com/sun/xml/internal/ws/api/pipe/helper/AbstractTubeImpl.copy:(Lcom/sun/xml/internal/ws/api/pipe/PipeCloner;)Lcom/sun/xml/internal/ws/api/pipe/helper/AbstractTubeImpl;
 sun/reflect/ConstantPool.getMethodAtIfLoaded:(I)Ljava/lang/reflect/Member;
@@ -77236,7 +77200,6 @@ com/sun/java/swing/plaf/windows/WindowsComboBoxUI$XPComboBoxButton.setPart:(Lcom
 com/sun/java/util/jar/pack/Package.fixupFileName:(Ljava/lang/String;)Ljava/lang/String;
 java/io/ObjectStreamClass$FieldReflector.getObjFieldValues:(Ljava/lang/Object;[Ljava/lang/Object;)V
 com/sun/corba/se/impl/corba/AnyImpl.insert_fixed:(Ljava/math/BigDecimal;)V
-java/io/CharArrayWriter.toString:()Ljava/lang/String;
 sun/reflect/annotation/AnnotationParser.parseAnnotations2:([BLsun/reflect/ConstantPool;Ljava/lang/Class;)Ljava/util/Map;
 com/sun/org/apache/xpath/internal/objects/XBooleanStatic.equals:(Lcom/sun/org/apache/xpath/internal/objects/XObject;)Z
 com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$InputStreamBuilder.mapAttachment:(Lcom/sun/xml/internal/ws/api/message/Attachment;[Ljava/lang/Object;)V
@@ -86861,7 +86824,6 @@ java/util/logging/SocketHandler.<init>:()V
 javax/security/auth/kerberos/KeyImpl.getAlgorithm:()Ljava/lang/String;
 com/sun/jndi/cosnaming/CNBindingEnumeration.<init>:(Lcom/sun/jndi/cosnaming/CNCtx;ZLjava/util/Hashtable;)V
 com/sun/media/sound/SoftReceiver.getMidiDevice:()Ljavax/sound/midi/MidiDevice;
-java/awt/EventQueue.invokeAndWait:(Ljava/lang/Runnable;)V
 com/sun/corba/se/spi/servicecontext/ServiceContextData.dprint:(Ljava/lang/String;)V
 com/sun/tools/javac/tree/JCTree$JCThrow.getExpression:()Lcom/sun/source/tree/ExpressionTree;
 com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM.getShouldStripWhitespace:()Z
@@ -91788,7 +91750,6 @@ sun/java2d/pipe/ShapeSpanIterator.intersectClipBox:(IIII)V
 sun/util/calendar/ImmutableGregorianDate.getZone:()Ljava/util/TimeZone;
 com/sun/xml/internal/xsom/impl/parser/state/NGCCInterleaveFilter.leaveElement:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 com/sun/tools/jdi/JDWP$ClassType$SetValues.waitForReply:(Lcom/sun/tools/jdi/VirtualMachineImpl;Lcom/sun/tools/jdi/PacketStream;)Lcom/sun/tools/jdi/JDWP$ClassType$SetValues;
-java/beans/Introspector.getBeanInfo:()Ljava/beans/BeanInfo;
 com/sun/org/apache/xalan/internal/xsltc/compiler/util/TestGenerator.loadCurrentNode:()Lcom/sun/org/apache/bcel/internal/generic/Instruction;
 sun/awt/dnd/SunDragSourceContextPeer.cleanup:()V
 sun/dc/path/PathConsumer.appendQuadratic:(FFFF)V
@@ -92006,7 +91967,6 @@ javax/swing/tree/DefaultTreeSelectionModel.readObject:(Ljava/io/ObjectInputStrea
 com/sun/org/apache/xerces/internal/dom/DeferredEntityReferenceImpl.synchronizeData:()V
 com/sun/tools/doclets/formats/html/HelpWriter.generateHelpFile:()V
 com/sun/org/apache/xalan/internal/xsltc/compiler/util/Type.LT:(Z)Lcom/sun/org/apache/bcel/internal/generic/BranchInstruction;
-java/io/CharArrayWriter.write:(I)V
 com/sun/corba/se/impl/activation/ShutdownServer.printCommandHelp:(Ljava/io/PrintStream;Z)V
 sun/org/mozilla/javascript/internal/NativeJavaObject.getJSTypeCode:(Ljava/lang/Object;)I
 com/sun/xml/internal/fastinfoset/stax/events/StartDocumentEvent.getSystemId:()Ljava/lang/String;
@@ -93723,7 +93683,6 @@ com/sun/corba/se/spi/activation/InitialNameServiceHelper.write:(Lorg/omg/CORBA/p
 sun/print/PSPathGraphics.drawImageToPlatform:(Ljava/awt/Image;Ljava/awt/geom/AffineTransform;Ljava/awt/Color;IIIIZ)Z
 java/awt/KeyboardFocusManager.setCurrentSequencedEvent:(Ljava/awt/SequencedEvent;)V
 com/sun/corba/se/impl/oa/poa/Policies.toString:()Ljava/lang/String;
-java/io/CharArrayWriter.writeTo:(Ljava/io/Writer;)V
 com/sun/tools/corba/se/idl/toJavaPortable/MethodGen.writeStubBodyForLocalInvocation:(Ljava/lang/String;Ljava/lang/String;)V
 com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.findVarBind:(Lcom/sun/jmx/snmp/SnmpVarBind;Lcom/sun/jmx/snmp/SnmpVarBind;)Lcom/sun/jmx/snmp/SnmpVarBind;
 com/sun/xml/internal/xsom/impl/scd/SCDParserTokenManager.jjAddStates:(II)V
@@ -94029,7 +93988,6 @@ com/sun/tools/internal/xjc/model/CEnumLeafInfo.getTypeName:()Ljavax/xml/namespac
 com/sun/codemodel/internal/JCatchBlock.param:(Ljava/lang/String;)Lcom/sun/codemodel/internal/JVar;
 javax/swing/JSplitPane$AccessibleJSplitPane.getMinimumAccessibleValue:()Ljava/lang/Number;
 org/omg/DynamicAny/_DynSequenceStub.current_component:()Lorg/omg/DynamicAny/DynAny;
-java/lang/System.getProperties:()Ljava/util/Properties;
 javax/swing/plaf/metal/MetalInternalFrameTitlePane.access$2900:(Ljavax/swing/plaf/metal/MetalInternalFrameTitlePane;)Ljavax/swing/JButton;
 com/sun/xml/internal/bind/v2/schemagen/Tree$Group.access$300:(Lcom/sun/xml/internal/bind/v2/schemagen/Tree$Group;)[Lcom/sun/xml/internal/bind/v2/schemagen/Tree;
 com/sun/jndi/dns/Resolver.findNameServers:(Lcom/sun/jndi/dns/DnsName;Z)[Ljava/lang/String;
@@ -98068,7 +98026,6 @@ sun/swing/FilePane$FileChooserUIAccessor.usesShellFolder:()Z
 com/sun/jmx/mbeanserver/MBeanSupport.getClassName:()Ljava/lang/String;
 com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$9.parse:(Ljava/lang/CharSequence;)Ljava/lang/Object;
 com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$SourceBuilder.<init>:(Lcom/sun/xml/internal/ws/model/ParameterImpl;Lcom/sun/xml/internal/ws/server/sei/EndpointValueSetter;)V
-javax/swing/SwingUtilities.invokeLater:(Ljava/lang/Runnable;)V
 sun/security/jgss/krb5/Krb5Context.resetMySequenceNumber:(I)V
 javax/xml/bind/ContextFinder.<clinit>:()V
 javax/swing/GroupLayout.invalidateLayout:(Ljava/awt/Container;)V
@@ -98628,7 +98585,6 @@ java/awt/BorderLayout.minimumLayoutSize:(Ljava/awt/Container;)Ljava/awt/Dimensio
 com/sun/xml/internal/ws/server/WSDLGenResolver.getAbstractWSDL:(Ljavax/xml/ws/Holder;)Ljavax/xml/transform/Result;
 com/sun/corba/se/impl/logging/ORBUtilSystemException.servantNotFound:()Lorg/omg/CORBA/OBJECT_NOT_EXIST;
 sun/security/jgss/krb5/Krb5MechFactory.getMechanismContext:(Lsun/security/jgss/spi/GSSNameSpi;Lsun/security/jgss/spi/GSSCredentialSpi;I)Lsun/security/jgss/spi/GSSContextSpi;
-java/beans/Introspector.getBeanInfo:(Ljava/lang/Class;Ljava/lang/Class;)Ljava/beans/BeanInfo;
 com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$AttachmentBuilder.<init>:(Lcom/sun/xml/internal/ws/model/ParameterImpl;Lcom/sun/xml/internal/ws/server/sei/EndpointValueSetter;)V
 sun/print/PeekGraphics.setColor:(Ljava/awt/Color;)V
 com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.addNewSimpleCustomTag:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
@@ -100366,7 +100322,6 @@ com/sun/org/apache/xml/internal/security/transforms/Transform.getURI:()Ljava/lan
 sun/security/provider/DSAParameterGenerator.generateG:(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;
 sun/font/FileFont.setStyle:()V
 sun/tools/tree/ConvertExpression.checkValue:(Lsun/tools/java/Environment;Lsun/tools/tree/Context;Lsun/tools/tree/Vset;Ljava/util/Hashtable;)Lsun/tools/tree/Vset;
-java/io/PrintWriter.printf:(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
 javax/activation/MimetypesFileTypeMap.getContentType:(Ljava/io/File;)Ljava/lang/String;
 com/sun/xml/internal/ws/binding/BindingImpl.getFeatures:()Lcom/sun/xml/internal/ws/binding/WebServiceFeatureList;
 javax/swing/JEditorPane$PageStream.skip:(J)J
@@ -101932,7 +101887,6 @@ com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeBodyPart.getCont
 java/awt/datatransfer/DataFlavor.getTextPlainUnicodeFlavor:()Ljava/awt/datatransfer/DataFlavor;
 javax/swing/plaf/metal/MetalTheme.<clinit>:()V
 sun/security/provider/ByteArrayAccess.b2iBig:([BI[III)V
-javax/swing/SwingUtilities.invokeAndWait:(Ljava/lang/Runnable;)V
 org/omg/CORBA/Any.insert_Object:(Lorg/omg/CORBA/Object;)V
 com/sun/org/apache/xerces/internal/dom/AttrImpl.setSpecified:(Z)V
 com/sun/xml/internal/rngom/digested/DXMLPrinter$DXMLPrinterVisitor.onOptional:(Lcom/sun/xml/internal/rngom/digested/DOptionalPattern;)Ljava/lang/Void;
@@ -103187,7 +103141,6 @@ com/sun/rowset/JdbcRowSetImpl.rowDeleted:()Z
 javax/swing/text/GlyphView.getBackground:()Ljava/awt/Color;
 java/awt/List$AccessibleAWTList$AccessibleAWTListChild.<init>:(Ljava/awt/List$AccessibleAWTList;Ljava/awt/List;I)V
 com/sun/xml/internal/xsom/impl/SchemaSetImpl$AnyType.iterateAttributeUses:()Ljava/util/Iterator;
-java/beans/Introspector.getBeanInfo:(Ljava/lang/Class;I)Ljava/beans/BeanInfo;
 com/sun/jndi/ldap/LdapCtx.c_search:(Ljavax/naming/Name;Ljava/lang/String;Ljavax/naming/directory/SearchControls;Lcom/sun/jndi/toolkit/ctx/Continuation;)Ljavax/naming/NamingEnumeration;
 com/sun/rowset/FilteredRowSetImpl.updateTime:(ILjava/sql/Time;)V
 javax/swing/JInternalFrame.setLayer:(Ljava/lang/Integer;)V
@@ -106529,7 +106482,6 @@ com/sun/xml/internal/ws/fault/SOAPFaultBuilder.getFaultString:()Ljava/lang/Strin
 com/sun/tools/internal/ws/wsdl/document/mime/MIMEPart.getNamespaceURI:()Ljava/lang/String;
 java/awt/event/FocusEvent.isTemporary:()Z
 com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.getAttributeNode:(ILjava/lang/String;Ljava/lang/String;)I
-javax/xml/stream/XMLInputFactory.newInstance:()Ljavax/xml/stream/XMLInputFactory;
 java/net/Inet6Address.isMCNodeLocal:()Z
 com/sun/org/apache/xerces/internal/impl/xs/models/XSAllCM.startContentModel:()[I
 com/sun/tools/internal/ws/processor/modeler/annotation/TypeModeler.<clinit>:()V
@@ -110167,7 +110119,6 @@ com/sun/xml/internal/bind/v2/model/impl/ElementInfoImpl.access$000:(Lcom/sun/xml
 com/sun/media/sound/RealTimeSequencer.getMasterSyncModes:()[Ljavax/sound/midi/Sequencer$SyncMode;
 javax/swing/plaf/basic/BasicTableHeaderUI.createHeaderSize:(J)Ljava/awt/Dimension;
 com/sun/tools/javac/tree/JCTree$JCImport.accept:(Lcom/sun/tools/javac/tree/JCTree$Visitor;)V
-java/util/logging/Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
 com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.getThreadPool:(Ljava/lang/String;)Lcom/sun/corba/se/spi/orbutil/threadpool/ThreadPool;
 com/sun/tools/internal/ws/resources/ModelMessages.MODEL_SCHEMA_JAXB_EXCEPTION_MESSAGE:(Ljava/lang/Object;)Ljava/lang/String;
 com/sun/jmx/snmp/daemon/SnmpMibTree$TreeNode.removeAgent:(Lcom/sun/jmx/snmp/agent/SnmpMibAgent;)V
@@ -111452,8 +111403,7 @@ com/sun/xml/internal/ws/org/objectweb/asm/Frame.execute:(IILcom/sun/xml/internal
 javax/swing/text/html/HTMLWriter.convertToHTML32:(Ljavax/swing/text/AttributeSet;Ljavax/swing/text/MutableAttributeSet;)V
 java/awt/Component.contains:(Ljava/awt/Point;)Z
 com/sun/org/omg/CORBA/AttrDescriptionSeqHelper.extract:(Lorg/omg/CORBA/Any;)[Lcom/sun/org/omg/CORBA/AttributeDescription;
-com/sun/java/util/jar/pack/PopulationCoding.keyString:(Lcom/sun/java/util/jar/pack/CodingMethod;)Ljava/lang/String;
-javax/xml/bind/JAXBContext.newInstance:(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/Map;)Ljavax/xml/bind/JAXBContext;
+com/sun/java/util/jar/pack/PopulationCoding.keyString:(Lcom/sun/java/util/jar/pack/CodingMethod;)Ljava/lang/String
 javax/swing/plaf/ViewportUI.installUI:(Ljavax/swing/JComponent;)V
 java/awt/Container.proxyEnableEvents:(J)V
 com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.inSubstitutionGroup:(Lcom/sun/org/apache/xerces/internal/impl/xs/XSElementDecl;Lcom/sun/org/apache/xerces/internal/impl/xs/XSElementDecl;)Z
@@ -111564,7 +111514,6 @@ com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream.write_double_arr
 java/lang/ClassLoader.checkPackageAccess:(Ljava/lang/Class;Ljava/security/ProtectionDomain;)V
 com/sun/corba/se/impl/encoding/CDRInputStream_1_1.grow:(II)V
 javax/swing/text/Segment.getBeginIndex:()I
-java/io/CharArrayWriter.append:(Ljava/lang/CharSequence;II)Ljava/io/CharArrayWriter;
 com/sun/org/apache/xml/internal/utils/XMLString.startsWith:(Lcom/sun/org/apache/xml/internal/utils/XMLString;)Z
 com/sun/xml/internal/ws/model/wsdl/WSDLModelImpl.addNotUnderstoodExtension:(Ljavax/xml/namespace/QName;Lorg/xml/sax/Locator;)V
 javax/swing/text/TableView.getColumnSpan:(I)I
@@ -113580,7 +113529,6 @@ sun/security/tools/SignatureFile$Block.getMetaName:()Ljava/lang/String;
 javax/activation/MimeType.writeExternal:(Ljava/io/ObjectOutput;)V
 sun/reflect/UnsafeFloatFieldAccessorImpl.<init>:(Ljava/lang/reflect/Field;)V
 sun/swing/text/TextComponentPrintable$4.<init>:(Lsun/swing/text/TextComponentPrintable;Ljavax/swing/text/JTextComponent;)V
-javax/xml/bind/JAXBContext.newInstance:(Ljava/lang/String;)Ljavax/xml/bind/JAXBContext;
 java/net/ServerSocket.implAccept:(Ljava/net/Socket;)V
 javax/swing/plaf/synth/SynthMenuItemLayoutHelper.getAccStyle:()Ljavax/swing/plaf/synth/SynthStyle;
 javax/swing/text/html/ObjectView.getUnloadableRepresentation:()Ljava/awt/Component;
diff --git a/Code/ChroniclerJ/src/com/rits/cloning/Cloner.java b/Code/ChroniclerJ/src/com/rits/cloning/Cloner.java
index c820cc8..c725e22 100644
--- a/Code/ChroniclerJ/src/com/rits/cloning/Cloner.java
+++ b/Code/ChroniclerJ/src/com/rits/cloning/Cloner.java
@@ -9,6 +9,8 @@ import java.math.BigInteger;
 import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -23,8 +25,7 @@ import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;

-import org.objenesis.Objenesis;
-import org.objenesis.ObjenesisStd;
+import javax.activation.FileDataSource;

 /**
  * Cloner: deep clone objects.
@@ -37,8 +38,9 @@ import org.objenesis.ObjenesisStd;
  */
 public class Cloner
 {
-	private final Objenesis									objenesis;
+	private final IInstantiationStrategy					instantiationStrategy;
 	private final Set<Class<?>>								ignored				= new HashSet<Class<?>>();
+	private final Set<Class<?>>								ignoredInstanceOf	= new HashSet<Class<?>>();
 	private final Set<Class<?>>								nullInstead			= new HashSet<Class<?>>();
 	private final Map<Class<?>, IFastCloner>				fastCloners			= new HashMap<Class<?>, IFastCloner>();
 	private final Map<Object, Boolean>						ignoredInstances	= new IdentityHashMap<Object, Boolean>();
@@ -50,13 +52,13 @@ public class Cloner

 	public Cloner()
 	{
-		objenesis = new ObjenesisStd();
+		this.instantiationStrategy = ObjenesisInstantiationStrategy.getInstance();
 		init();
 	}

-	public Cloner(final Objenesis objenesis)
+	public Cloner(final IInstantiationStrategy instantiationStrategy)
 	{
-		this.objenesis = objenesis;
+		this.instantiationStrategy = instantiationStrategy;
 		init();
 	}

@@ -190,7 +192,6 @@ public class Cloner
 				final int mods = field.getModifiers();
 				if (Modifier.isStatic(mods) && !field.getType().isPrimitive())
 				{
-					//					System.out.println(c + " . " + field.getName());
 					registerConstant(c, field.getName());
 				}
 			}
@@ -220,6 +221,27 @@ public class Cloner
 			ignored.add(cl);
 		}
 	}
+	public boolean isIgnored(Class<?> clz)
+	{
+		for(final Class<?> c : ignored)
+		{
+			if (c.isAssignableFrom(clz))
+				return true;
+		}
+		return false;
+	}
+	public void dontCloneInstanceOf(final Class<?>... c)
+	{
+		for (final Class<?> cl : c)
+		{
+			ignoredInstanceOf.add(cl);
+		}
+	}
+
+	public void setDontCloneInstanceOf(final Class<?>... c)
+	{
+		dontCloneInstanceOf(c);
+	}

 	/**
 	 * instead of cloning these classes will set the field to null
@@ -276,10 +298,9 @@ public class Cloner
 	 * @param c			the class
 	 * @return			a new instance of c
 	 */
-	@SuppressWarnings("unchecked")
-	public <T> T newInstance(final Class<T> c)
+	protected <T> T newInstance(final Class<T> c)
 	{
-		return (T) objenesis.newInstance(c);
+		return instantiationStrategy.newInstance(c);
 	}

 	@SuppressWarnings("unchecked")
@@ -366,46 +387,85 @@ public class Cloner
 	}

 	// caches immutables for quick reference
-	private final ConcurrentHashMap<Class<?>, Boolean>	immutables	= new ConcurrentHashMap<Class<?>, Boolean>();
-	private boolean isIgnored(final Class<?> clz)
+	private final ConcurrentHashMap<Class<?>, Boolean>	immutables				= new ConcurrentHashMap<Class<?>, Boolean>();
+	private boolean										cloneAnonymousParent	= true;
+
+	/**
+	 * override this to decide if a class is immutable. Immutable classes are not cloned.
+	 *
+	 * @param clz		the class under check
+	 * @return			true to mark clz as immutable and skip cloning it
+	 */
+	protected boolean considerImmutable(final Class<?> clz)
 	{
-		for(Class<?> c : ignored)
-		{
-			if(c.isAssignableFrom(clz))
-				return true;
-		}
 		return false;
 	}
+
+	protected Class<?> getImmutableAnnotation()
+	{
+		return Immutable.class;
+	}
+
+	/**
+	 * decides if a class is to be considered immutable or not
+	 *
+	 * @param clz		the class under check
+	 * @return			true if the clz is considered immutable
+	 */
 	private boolean isImmutable(final Class<?> clz)
 	{
-		final Boolean b = immutables.get(clz);
-		if (b != null && b) return true;
-		for (final Annotation annotation : clz.getDeclaredAnnotations())
-		{
-			if (annotation.annotationType() == Immutable.class)
-			{
-				immutables.put(clz, Boolean.TRUE);
-				return true;
-			}
-		}
-		Class<?> c = clz.getSuperclass();
-		while (c != null && c != Object.class)
-		{
-			for (final Annotation annotation : c.getDeclaredAnnotations())
-			{
-				if (annotation.annotationType() == Immutable.class)
-				{
-					final Immutable im = (Immutable) annotation;
-					if (im.subClass())
-					{
-						immutables.put(clz, Boolean.TRUE);
-						return true;
-					}
-				}
-			}
-			c = c.getSuperclass();
+		if(
+				clz.getName().equals("java.util.HashSet")
+//clz.getName().startsWith("java.util")
+//&& !clz.getName().equals("java.util.HashMap")
+//&& !clz.getName().equals("java.util.LinkedHashMap")
+//&& !clz.getName().startsWith("java.util.Hashtable")
+//&& !clz.getName().equals("java.util.ArrayList")
+//&& !clz.getName().contains("Map")
+//&& ! clz.getName().startsWith("java.util.Collections")
+////&& !clz.getName().equals("java.util.HashSet") //bad
+//&& !clz.getName().startsWith("java.util.Linked")
+//&& !clz.getName().contains("Vector")
+//&& !clz.getName().equals("java.util.concurrent.CopyOnWriteArrayList")
+//&& !clz.getName().equals("java.util.Arrays$ArrayList")
+				)
+		{
+//				System.out.println(clz.getName());
+			return true;
 		}
+		final Boolean isIm = immutables.get(clz);
+		if (isIm != null) return isIm;
+		if (considerImmutable(clz)) return true;
 		return false;
+
+//		final Class<?> immutableAnnotation = getImmutableAnnotation();
+//		for (final Annotation annotation : clz.getDeclaredAnnotations())
+//		{
+//			if (annotation.annotationType() == immutableAnnotation)
+//			{
+//				immutables.put(clz, Boolean.TRUE);
+//				return true;
+//			}
+//		}
+//		Class<?> c = clz.getSuperclass();
+//		while (c != null && c != Object.class)
+//		{
+//			for (final Annotation annotation : c.getDeclaredAnnotations())
+//			{
+//				if (annotation.annotationType() == Immutable.class)
+//				{
+//					final Immutable im = (Immutable) annotation;
+//					if (im.subClass())
+//					{
+//						immutables.put(clz, Boolean.TRUE);
+//						return true;
+//					}
+//				}
+//			}
+//			c = c.getSuperclass();
+//		}
+//		immutables.put(clz, Boolean.FALSE);
+//		return false;
 	}

 	/**
@@ -422,9 +482,12 @@ public class Cloner
 		if (clz.isEnum()) return o;
 		// skip cloning ignored classes
 		if (nullInstead.contains(clz)) return null;
-		if (ignored.contains(clz)) return o;
-		if (isImmutable(clz)) return o;
 		if (isIgnored(clz)) return o;
+		for (final Class<?> iClz : ignoredInstanceOf)
+		{
+			if (iClz.isAssignableFrom(clz)) return o;
+		}
+		if (isImmutable(clz)) return o;
 		if (o instanceof IFreezable)
 		{
 			final IFreezable f = (IFreezable) o;
@@ -451,13 +514,21 @@ public class Cloner
 		{
 			final int length = Array.getLength(o);
 			final T newInstance = (T) Array.newInstance(clz.getComponentType(), length);
-			if(clones != null)
+			if (clones != null)
+			{
 				clones.put(o, newInstance);
+			}
 			for (int i = 0; i < length; i++)
 			{
 				final Object v = Array.get(o, i);
 				final Object clone = clones != null ? cloneInternal(v, clones) : v;
+				try{
 				Array.set(newInstance, i, clone);
+				}
+				catch(Exception ex)
+				{
+					Array.set(newInstance, i, v);
+				}
 			}
 			return newInstance;
 		}
@@ -484,9 +555,17 @@ public class Cloner
 				} else
 				{
 					final Object fieldObject = field.get(o);
-					final boolean shouldClone = cloneSynthetics || (!cloneSynthetics && !field.isSynthetic());
+					final boolean shouldClone = (cloneSynthetics || (!cloneSynthetics && !field.isSynthetic())) && (cloneAnonymousParent || ((!cloneAnonymousParent && !isAnonymousParent(field))));
 					final Object fieldObjectClone = clones != null ? (shouldClone ? cloneInternal(fieldObject, clones) : fieldObject) : fieldObject;
-					field.set(newInstance, fieldObjectClone);
+					try
+					{
+						field.set(newInstance, fieldObjectClone);
+					}
+					catch(Exception ex)
+					{
+//						ex.printStackTrace();
+//						System.exit(-1);
+					}
 					if (dumpClonedClasses && fieldObjectClone != fieldObject)
 					{
 						System.out.println("cloned field>" + field + "  -- of class " + o.getClass());
@@ -497,6 +576,11 @@ public class Cloner
 		return newInstance;
 	}

+	private boolean isAnonymousParent(final Field field)
+	{
+		return "this$0".equals(field.getName());
+	}
+
 	/**
 	 * copies all properties from src to dest. Src and dest can be of different class, provided they contain same field names/types
 	 *
@@ -552,16 +636,18 @@ public class Cloner
 	{
 		for (final Field field : fields)
 		{
-			if (!field.isAccessible()) field.setAccessible(true);
-			if(!Modifier.isStatic(field.getModifiers()))
-				l.add(field);
+			if (!field.isAccessible())
+			{
+				field.setAccessible(true);
+			}
+			l.add(field);
 		}
 	}

 	/**
-	 * reflection utils
+	 * reflection utils, override this to choose which fields to clone
 	 */
-	private List<Field> allFields(final Class<?> c)
+	protected List<Field> allFields(final Class<?> c)
 	{
 		List<Field> l = fieldsCache.get(c);
 		if (l == null)
@@ -603,4 +689,17 @@ public class Cloner
 	{
 		this.cloningEnabled = cloningEnabled;
 	}
+
+	/**
+	 * if false, anonymous classes parent class won't be cloned. Default is true
+	 */
+	public void setCloneAnonymousParent(final boolean cloneAnonymousParent)
+	{
+		this.cloneAnonymousParent = cloneAnonymousParent;
+	}
+
+	public boolean isCloneAnonymousParent()
+	{
+		return cloneAnonymousParent;
+	}
 }
diff --git a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerArrayList.java b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerArrayList.java
index 0f9ad78..b9dc489 100644
--- a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerArrayList.java
+++ b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerArrayList.java
@@ -12,21 +12,15 @@ public class FastClonerArrayList implements IFastCloner
 {
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public Object clone(final Object t, final Cloner cloner, final Map<Object, Object> clones) throws IllegalAccessException
-	{
-			final ArrayList al = (ArrayList) t;
-//			synchronized (t) {
-
-
-
-			final ArrayList l = new ArrayList();
-			for (final Object o : al)
-			{
-				final Object cloneInternal = cloner.cloneInternal(o, clones);
-				l.add(cloneInternal);
-			}
-			return l;
-
-//		}
+	{
+		final ArrayList al = (ArrayList) t;
+		final ArrayList l = new ArrayList();
+		for (final Object o : al)
+		{
+			final Object cloneInternal = cloner.cloneInternal(o, clones);
+			l.add(cloneInternal);
+		}
+		return l;
 	}

 }
diff --git a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerConcurrentHashMap.java b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerConcurrentHashMap.java
index 4cd5784..e49a907 100644
--- a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerConcurrentHashMap.java
+++ b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerConcurrentHashMap.java
@@ -13,26 +13,15 @@ public class FastClonerConcurrentHashMap implements IFastCloner
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public Object clone(final Object t, final Cloner cloner, final Map<Object, Object> clones) throws IllegalAccessException
 	{
-		synchronized (t) {
-
 		final ConcurrentHashMap<Object, Object> m = (ConcurrentHashMap) t;
 		final ConcurrentHashMap result = new ConcurrentHashMap();
-		synchronized (m.entrySet()) {
-
 		for (final Map.Entry e : m.entrySet())
 		{
-			synchronized (e.getKey()) {
-
-
 			final Object key = cloner.cloneInternal(e.getKey(), clones);
 			final Object value = cloner.cloneInternal(e.getValue(), clones);
-			if(key != null && value != null)
-			result.put(key, value);
-			}
+			if (key != null && value != null)
+				result.put(key, value);
 		}
-
 		return result;
-		}
-		}
 	}
 }
diff --git a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashMap.java b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashMap.java
index 21be710..3fa059c 100644
--- a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashMap.java
+++ b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashMap.java
@@ -5,32 +5,31 @@ import java.util.Map;

 /**
  * @author kostantinos.kougios
- *
- *         21 May 2009
+ *
+ * 21 May 2009
  */
-public class FastClonerHashMap implements IFastCloner {
+public class FastClonerHashMap implements IFastCloner
+{
 	@SuppressWarnings({ "unchecked", "rawtypes" })
-	public Object clone(final Object t, final Cloner cloner, final Map<Object, Object> clones) throws IllegalAccessException {
+	public Object clone(final Object t, final Cloner cloner, final Map<Object, Object> clones) throws IllegalAccessException
+	{
+		try {
+

 		final HashMap<Object, Object> m = (HashMap) t;
-		try{
-//		synchronized (m) {
-//			synchronized (m.entrySet()) {
-
-				final HashMap result = new HashMap();
-				for (final Map.Entry e : m.entrySet()) {
-					final Object key = cloner.cloneInternal(e.getKey(), clones);
-					final Object value = cloner.cloneInternal(e.getValue(), clones);
+		final HashMap result = new HashMap();
+		for (final Map.Entry e : m.entrySet())
+		{
+			final Object key = cloner.cloneInternal(e.getKey(), clones);
+			final Object value = cloner.cloneInternal(e.getValue(), clones);

-					result.put(key, value);
-				}
-				return result;
-//			}
-//		}
+			result.put(key, value);
+		}
+		return result;
 		}
 		catch(Exception ex)
 		{
-			return clone(t, cloner, clones);
+			return null;
 		}
 	}
 }
diff --git a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashSet.java b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashSet.java
index 21720ea..519d71a 100644
--- a/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashSet.java
+++ b/Code/ChroniclerJ/src/com/rits/cloning/FastClonerHashSet.java
@@ -5,21 +5,22 @@ import java.util.Map;

 /**
  * @author kostantinos.kougios
- *
- *         21 May 2009
+ *
+ * 21 May 2009
  */
-public class FastClonerHashSet implements IFastCloner {
+public class FastClonerHashSet implements IFastCloner
+{
 	@SuppressWarnings({ "unchecked", "rawtypes" })
-	public Object clone(final Object t, final Cloner cloner, final Map<Object, Object> clones) throws IllegalAccessException {
-//		synchronized (t) {
-
-			final HashSet al = (HashSet) t;
-			final HashSet l = new HashSet();
-			for (final Object o : al) {
-				final Object cloneInternal = cloner.cloneInternal(o, clones);
+	public Object clone(final Object t, final Cloner cloner, final Map<Object, Object> clones) throws IllegalAccessException
+	{
+		final HashSet al = (HashSet) t;
+		final HashSet l = new HashSet();
+		for (final Object o : al)
+		{
+			final Object cloneInternal = cloner.cloneInternal(o, clones);
+			if(cloneInternal != null)
 				l.add(cloneInternal);
-			}
-			return l;
-//		}
+		}
+		return l;
 	}
 }
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackInvocation.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackInvocation.java
index d55d1d5..347c8ab 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackInvocation.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackInvocation.java
@@ -20,6 +20,7 @@ public class CallbackInvocation {
 	private boolean executed;
 	private int clock;
 	private String threadName;
+
 	public CallbackInvocation(String clazz, String methodName, String methodDesc, Object[] args, Object owner) {
 		this.clazz = clazz;
 		this.methodName = methodName;
@@ -30,9 +31,11 @@ public class CallbackInvocation {
 				+ SerializableLog.sLog_fill + SerializableLog.zLog_fill + Log.aLog_fill;
 		this.threadName = Thread.currentThread().getName();
 	}
+
 	public String getThreadName() {
 		return threadName;
 	}
+
 	public int getClock() {
 		return clock;
 	}
@@ -46,28 +49,26 @@ public class CallbackInvocation {
 			return false;
 		executed = true;
 		try {
-			if (CallbackRegistry.get(ownerID) == null)
-			{
-//				System.out.println("Queued");
+			if (CallbackRegistry.get(ownerID) == null) {
+				//				System.out.println("Queued");
 				CallbackRegistry.queueInvocation(ownerID, this);
-			}
-			else {
-				if(this.threadName.startsWith("AWT-EventQueue-"))
-				{
+			} else {
+				if (!this.threadName.startsWith("AWT-EventQueue-")) {
 					try {
 						final Object owner = CallbackRegistry.get(ownerID);
 						final Method method = getMethod();
 						EventQueue.invokeAndWait(new Runnable() {
-
+
 							@Override
 							public void run() {
 								try {
-//									System.out.println("Dispatching to AWT");
+									//									System.out.println("Dispatching to AWT");
 									method.invoke(owner, args);
-//									System.out.println("Executed");
+									//									System.out.println("Executed");
 								} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
 									// TODO Auto-generated catch block
-									e.printStackTrace();
+									e.getCause().printStackTrace();
+									System.exit(-1);
 								}
 							}
 						});
@@ -75,16 +76,19 @@ public class CallbackInvocation {
 						// TODO Auto-generated catch block
 						e.printStackTrace();
 					}
+				} else {
+					try {
+						getMethod().invoke(CallbackRegistry.get(ownerID), args);
+					} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+						// TODO Auto-generated catch block
+						e.getCause().printStackTrace();
+						System.exit(-1);
+					}
 				}
-				else
-				getMethod().invoke(CallbackRegistry.get(ownerID), args);
 			}
 		} catch (IllegalArgumentException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
-		} catch (IllegalAccessException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
 		} catch (InvocationTargetException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackRegistry.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackRegistry.java
index 5ba8ef0..ef13dd2 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackRegistry.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CallbackRegistry.java
@@ -22,6 +22,7 @@ public class CallbackRegistry {
 	private static HashMap<String, LinkedList<CallbackInvocation>> queuedInvocations = new HashMap<String, LinkedList<CallbackInvocation>>();
 	public static synchronized void register(Object o)
 	{
+//		System.out.println("Register callback");
 		String key = Thread.currentThread().getName()+count.get();
 //		System.out.println(key + " registered");
 		registry.put(key, o);
@@ -45,6 +46,7 @@ public class CallbackRegistry {
 	}
 	public static synchronized Object get(String id)
 	{
+//		System.out.println("Get callback");
 		return registry.get(id);
 	}
 }
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/ChroniclerJExportRunner.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/ChroniclerJExportRunner.java
index 7ac83be..11867f3 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/ChroniclerJExportRunner.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/ChroniclerJExportRunner.java
@@ -28,6 +28,7 @@ public class ChroniclerJExportRunner extends Thread {

 	public static void logMain(String main, String[] args)
 	{
+		CloningUtils.init();
 		mainClass = main;
 		mainArgs = new String[args.length];
 		System.arraycopy(args, 0, mainArgs, 0, args.length);
@@ -39,7 +40,7 @@ public class ChroniclerJExportRunner extends Thread {
 		exportSerializable();
 		try {

-			File logFile = new File("chroniclerj-crash-"+System.currentTimeMillis());
+			File logFile = new File("chroniclerj-crash-"+System.currentTimeMillis()+".test");

 			Manifest manifest = new Manifest();
 			  manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
@@ -79,6 +80,8 @@ public class ChroniclerJExportRunner extends Thread {
 				}
 				is.close();
 				zos.closeEntry();
+				File f = new File(s);
+				f.delete();
 			}
 			for(String s : otherLogs)
 			{
@@ -94,6 +97,8 @@ public class ChroniclerJExportRunner extends Thread {
 				}
 				is.close();
 				zos.closeEntry();
+				File f = new File(s);
+				f.delete();
 			}
 			zos.flush();
 			zos.close();
@@ -141,8 +146,8 @@ public class ChroniclerJExportRunner extends Thread {

 	public static void export() {
 		shouldExport = 0;
-		System.out.println("Export");
 		try {
+
 			XStream xstream = new XStream(new StaticReflectionProvider());
 			String xml = "";
 			Log.logLock.lock();
@@ -178,7 +183,6 @@ public class ChroniclerJExportRunner extends Thread {
 	public static void exportSerializable() {
 		shouldExportSerializable = 0;
 		try {
-			System.out.println("Export_s");

 			Log.logLock.lock();
 			{
@@ -250,7 +254,6 @@ public class ChroniclerJExportRunner extends Thread {
 			oos.flush();
 			oos.close();
 			ExportedLog.clearLog();
-			System.out.println("Export_s done");
 		} catch (Exception exi) {

 		}
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CloningUtils.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CloningUtils.java
index b3bea55..078baca 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CloningUtils.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/CloningUtils.java
@@ -4,20 +4,37 @@ import java.io.Closeable;
 import java.io.File;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.Writer;
+import java.lang.reflect.Method;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
 import java.nio.channels.Channel;
+import java.nio.channels.Selector;
 import java.security.Permissions;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
+import java.util.Properties;
+import java.util.Timer;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.jar.JarFile;
+import java.util.logging.Logger;
 import java.util.zip.Deflater;
 import java.util.zip.Inflater;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;

+import javax.management.MBeanServer;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+
+import sun.nio.ch.DirectBuffer;
+
 import com.rits.cloning.Cloner;

 public class CloningUtils {
@@ -26,7 +43,19 @@ public class CloningUtils {
 	public static ReadWriteLock		exportLock			= new ReentrantReadWriteLock();
 	private static HashSet<Class<?>>	moreIgnoredImmutables;
 	private static HashSet<Class<?>>	nullInsteads;
+	private static HashSet<String> specificIgnored = new HashSet<>();
+	private static boolean inited= false;
+	public static void init()
+	{
+		if(inited)
+			return;
+		inited=true;
+		ChroniclerJExportRunner.inst.start();
+		if (CATCH_ALL_ERRORS) {
+			Thread.setDefaultUncaughtExceptionHandler(new ChroniclerJUncaughtExceptionHandler());
+		}

+	}
 //	private static BufferedWriter		log;
 	static {
 		moreIgnoredImmutables = new HashSet<Class<?>>();
@@ -36,6 +65,7 @@ public class CloningUtils {
 		moreIgnoredImmutables.add(File.class);
 		moreIgnoredImmutables.add(ZipFile.class);
 		moreIgnoredImmutables.add(ZipEntry.class);
+		moreIgnoredImmutables.add(JarFile.class);
 		moreIgnoredImmutables.add(Inflater.class);
 		moreIgnoredImmutables.add(InputStream.class);
 		moreIgnoredImmutables.add(OutputStream.class);
@@ -45,18 +75,45 @@ public class CloningUtils {
 		moreIgnoredImmutables.add(Channel.class);
 		moreIgnoredImmutables.add(Closeable.class);
 		moreIgnoredImmutables.add(Class.class);
+		moreIgnoredImmutables.add(CallbackInvocation.class);
+		moreIgnoredImmutables.add(Method.class);
+		moreIgnoredImmutables.add(Logger.class);
+		moreIgnoredImmutables.add(URLConnection.class);
+		moreIgnoredImmutables.add(MBeanServer.class);
+		moreIgnoredImmutables.add(DirectBuffer.class);
+		moreIgnoredImmutables.add(Semaphore.class);
+		moreIgnoredImmutables.add(Lock.class);
+		moreIgnoredImmutables.add(ReadWriteLock.class);
+		moreIgnoredImmutables.add(Writer.class);
+		moreIgnoredImmutables.add(Properties.class);
+		moreIgnoredImmutables.add(Timer.class);
+		moreIgnoredImmutables.add(ObjectName.class);
+		moreIgnoredImmutables.add(ObjectInstance.class);
+		moreIgnoredImmutables.add(Selector.class);
+		moreIgnoredImmutables.add(URI.class);
+		moreIgnoredImmutables.add(URL.class);
+
 		cloner.setExtraNullInsteadOfClone(moreIgnoredImmutables);
 		cloner.setExtraImmutables(moreIgnoredImmutables);

+		specificIgnored.add("org.apache.geronimo.security.jaas.LoginModuleControlFlag");
+		specificIgnored.add("org.apache.openejb.core.ivm.naming.IvmContext");
+		specificIgnored.add("org.apache.geronimo.openejb.GeronimoSecurityService");
+		specificIgnored.add("org.apache.geronimo.kernel.config.ConfigurationData");
+		specificIgnored.add("sun.net.www.protocol.jar.URLJarFile");
+		specificIgnored.add("sun.net.www.protocol.jar.JarURLConnection");
+//		cloner.dontClone("org.apache.geronimo.gbean.GBeanInfo");
+//		cloner.dontClone("org.apache.geronimo.gbean.AbstractName");
+//		cloner.dontClone("org.apache.geronimo.security.jaas.LoginModuleControlFlag");
+//		cloner.dontClone("org.apache.geronimo.kernel.config.ConfigurationData");
+//		cloner.dontClone("org.apache.geronimo.kernel.repository.Artifact");
+
 		nullInsteads = new HashSet<Class<?>>();
 		nullInsteads.add(Permissions.class);
 		cloner.setExtraNullInsteadOfClone(nullInsteads);
+		init();
 //		cloner.setDumpClonedClasses(true);
-		ChroniclerJExportRunner.inst.start();
-		if (CATCH_ALL_ERRORS) {
-			Thread.setDefaultUncaughtExceptionHandler(new ChroniclerJUncaughtExceptionHandler());
-		}
-//		try {
+		//		try {
 //			File f = new File("cloneLog");
 //			if (f.exists())
 //				f.delete();
@@ -68,8 +125,21 @@ public class CloningUtils {
 	}

 	public static final <T> T clone(T obj, String debug) {
-// 		System.out.println("source>"+debug);
-			return cloner.deepClone(obj);
+		if(obj != null)
+		{
+//			System.out.println(debug);
+//			if(specificIgnored.contains(obj.getClass().getName()))
+//				return obj;
+//			System.out.println(obj.getClass().getName());
+//	 		System.out.println("source>"+obj.getClass().getName() +"..."+Thread.currentThread().getName());
+//				T ret = cloner.deepClone(obj);
+//			T ret = obj;
+//				return ret;
+				return obj;
+		}
+
+//			System.out.println("Done");
+			return null;
 	}

 	public static IdentityHashMap<Object, Object>	cloneCache	= new IdentityHashMap<Object, Object>();	;
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Constants.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Constants.java
index 2bce603..9f22bda 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Constants.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Constants.java
@@ -1,10 +1,9 @@
 package edu.columbia.cs.psl.chroniclerj;

-public interface Constants {
+public class Constants {

 	public static int DEFAULT_LOG_SIZE = 2000;
 	public static int MAX_LOG_SIZE = 40000000;
-	public static int VERY_MAX_LOG_SIZE = 400000000;

 	public static double LOG_GROWTH_RATE = 2.5;
 	public static String REPLAY_CLASS_SUFFIX = "InvivoReplay";
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Instrumenter.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Instrumenter.java
index 7d8a7d4..b0911c5 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Instrumenter.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/Instrumenter.java
@@ -7,6 +7,7 @@ import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.channels.FileChannel;
@@ -17,11 +18,15 @@ import java.util.Scanner;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.jar.JarOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;

 import org.apache.log4j.Logger;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.commons.SerialVersionUIDAdder;
 import org.objectweb.asm.tree.ClassNode;
 import org.objectweb.asm.util.CheckClassAdapter;

@@ -54,10 +59,14 @@ public class Instrumenter {
 	private static void analyzeClass(InputStream inputStream) {
 		try {
 			ClassNode analysisResult = ma.analyzeClass(new ClassReader(inputStream));
+			if(analysisResult == null)
+			{
+				logger.error("Null analysis result on this analysis");
+			}
 			instrumentedClasses.put(analysisResult.name, analysisResult);
 		} catch (IOException e) {
 			// TODO Auto-generated catch block
-			e.printStackTrace();
+			logger.error("Error in analysis",e);
 		}
 	}

@@ -75,6 +84,14 @@ public class Instrumenter {
 	private static byte[] instrumentClass(InputStream is) {
 		try {
 			ClassReader cr = new ClassReader(is);
+			{
+				ClassWriter cw = new ClassWriter(cr, 0);
+				SerialVersionUIDAdder uidAdder = new SerialVersionUIDAdder(cw);
+				cr.accept(uidAdder, 0);
+				byte[] b = cw.toByteArray();
+				cr = new ClassReader(b);
+			}
+
 			ClassWriter cw = new InstrumenterClassWriter(cr, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES, loader);
 			NonDeterministicLoggingClassVisitor cv = new NonDeterministicLoggingClassVisitor(Opcodes.ASM4, cw);

@@ -139,7 +156,9 @@ public class Instrumenter {
 			if (f.isDirectory())
 				processDirectory(f, rootOutputDir, true);
 			else if (inputFolder.endsWith(".jar"))
-				processJar(f, rootOutputDir);
+					processJar(f,rootOutputDir);
+			else if (inputFolder.endsWith(".zip"))
+				processZip(f,rootOutputDir);
 			else if (inputFolder.endsWith(".class"))
 				try {
 					processClass(f.getName(), new FileInputStream(f), rootOutputDir);
@@ -200,7 +219,15 @@ public class Instrumenter {
 					e.printStackTrace();
 				}
 			else if (fi.getName().endsWith(".jar"))
-				processJar(fi, thisOutputDir);
+			{
+					if(!thisOutputDir.exists())
+						thisOutputDir.mkdir();
+					processJar(fi, thisOutputDir);
+			}
+			else if(fi.getName().endsWith(".zip"))
+			{
+				processZip(fi, thisOutputDir);
+			}
 			else if (pass_number == PASS_OUTPUT) {
 				File dest = new File(thisOutputDir.getPath() + File.separator + fi.getName());
 				FileChannel source = null;
@@ -237,12 +264,126 @@ public class Instrumenter {

 	}

+//	@Deprecated
+//	private static void processJar(InputStream inputStream, OutputStream os) {
+//		try {
+//
+//			File f = new File("/tmp/classfile");
+//			if(f.exists())
+//				f.delete();
+//			FileOutputStream fos = new FileOutputStream(f);
+//			byte buf[] = new byte[1024];
+//			int len;
+//			while((len=inputStream.read(buf)) > 0)
+//			{
+//				fos.write(buf,0,len);
+//			}
+//			fos.close();
+//			inputStream.close();
+//
+//			@SuppressWarnings("resource")
+//			JarFile jar = new JarFile(f);
+//			JarOutputStream jos = null;
+//			if (pass_number == PASS_OUTPUT)
+//				jos = new JarOutputStream(os);
+////				jos = new JarOutputStream(new FileOutputStream(outputDir.getPath() + File.separator + f.getName()));
+//			Enumeration<JarEntry> entries = jar.entries();
+//			while (entries.hasMoreElements()) {
+//				JarEntry e = entries.nextElement();
+//				switch (pass_number) {
+//				case PASS_ANALYZE:
+//					if (e.getName().endsWith(".class")) {
+//						analyzeClass(jar.getInputStream(e));
+//					}
+//					break;
+//				case PASS_OUTPUT:
+//					if (e.getName().endsWith(".class") && !e.getName().startsWith("java") && !e.getName().startsWith("org/objenesis")
+//							&& !e.getName().startsWith("com/thoughtworks/xstream/") && !e.getName().startsWith("com/rits/cloning")
+//							&& !e.getName().startsWith("com/apple/java/Application")) {
+//						{
+//							JarEntry outEntry = new JarEntry(e.getName());
+//							jos.putNextEntry(outEntry);
+//							byte[] clazz = instrumentClass(jar.getInputStream(e));
+//							if(clazz == null)
+//							{
+//								System.out.println("Unable to transform " + e.getName());
+//								InputStream is = jar.getInputStream(e);
+//								byte[] buffer = new byte[1024];
+//								while (true) {
+//									int count = is.read(buffer);
+//									if (count == -1)
+//										break;
+//									jos.write(buffer, 0, count);
+//								}
+//							}
+//							else
+//									jos.write(clazz);
+//							jos.closeEntry();
+//						}
+//
+//
+//					} else {
+//						JarEntry outEntry = new JarEntry(e.getName());
+//						if (e.isDirectory()) {
+//							jos.putNextEntry(outEntry);
+//							jos.closeEntry();
+//						} else if (e.getName().startsWith("META-INF") && (e.getName().endsWith(".SF") || e.getName().endsWith(".RSA"))) {
+//							// don't copy this
+//						} else if (e.getName().equals("META-INF/MANIFEST.MF")) {
+//							Scanner s = new Scanner(jar.getInputStream(e));
+//							jos.putNextEntry(outEntry);
+//
+//							String curPair = "";
+//							while (s.hasNextLine()) {
+//								String line = s.nextLine();
+//								if (line.equals("")) {
+//									curPair += "\n";
+//									if (!curPair.contains("SHA1-Digest:"))
+//										jos.write(curPair.getBytes());
+//									curPair = "";
+//								} else {
+//									curPair += line + "\n";
+//								}
+//							}
+//							s.close();
+//							jos.write("\n".getBytes());
+//							jos.closeEntry();
+//						} else {
+//							jos.putNextEntry(outEntry);
+//							InputStream is = jar.getInputStream(e);
+//							byte[] buffer = new byte[1024];
+//							while (true) {
+//								int count = is.read(buffer);
+//								if (count == -1)
+//									break;
+//								jos.write(buffer, 0, count);
+//							}
+//							jos.closeEntry();
+//						}
+//					}
+//				}
+//
+//			}
+//			if(jos != null)
+//			{
+//				jos.flush();
+////				jos.finish();
+//			}
+//		} catch (Exception e) {
+//			// TODO Auto-generated catch block
+//			logger.error("Unable to process jar" , e);
+//			System.exit(-1);
+//		}
+//
+//	}
 	private static void processJar(File f, File outputDir) {
 		try {
-			@SuppressWarnings("resource")
+
+//			@SuppressWarnings("resource")
 			JarFile jar = new JarFile(f);
 			JarOutputStream jos = null;
 			if (pass_number == PASS_OUTPUT)
+//				jos = new JarOutputStream(os);
 				jos = new JarOutputStream(new FileOutputStream(outputDir.getPath() + File.separator + f.getName()));
 			Enumeration<JarEntry> entries = jar.entries();
 			while (entries.hasMoreElements()) {
@@ -256,13 +397,14 @@ public class Instrumenter {
 				case PASS_OUTPUT:
 					if (e.getName().endsWith(".class") && !e.getName().startsWith("java") && !e.getName().startsWith("org/objenesis")
 							&& !e.getName().startsWith("com/thoughtworks/xstream/") && !e.getName().startsWith("com/rits/cloning")
-							&& !e.getName().startsWith("com/apple/java/Application")) {
+							&& !e.getName().startsWith("com/apple/java/Application") && !e.getName().startsWith("net/sf/cglib/")) {
 						{
 							JarEntry outEntry = new JarEntry(e.getName());
 							jos.putNextEntry(outEntry);
 							byte[] clazz = instrumentClass(jar.getInputStream(e));
 							if(clazz == null)
 							{
+								System.out.println("Failed to instrument " + e.getName());
 								InputStream is = jar.getInputStream(e);
 								byte[] buffer = new byte[1024];
 								while (true) {
@@ -320,12 +462,169 @@ public class Instrumenter {
 				}

 			}
+			if(jos != null)
+			{
+			jos.close();
+
+			}
+			jar.close();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			logger.error("Unable to process jar" , e);
+			System.exit(-1);
+		}
+
+	}
+	private static void processZip(File f, File outputDir) {
+		try {
+//			@SuppressWarnings("resource")
+			ZipFile zip = new ZipFile(f);
+			ZipOutputStream zos = null;
+			if (pass_number == PASS_OUTPUT)
+				zos = new ZipOutputStream(new FileOutputStream(outputDir.getPath() + File.separator + f.getName()));
+			Enumeration<? extends ZipEntry> entries = zip.entries();
+			while (entries.hasMoreElements()) {
+				ZipEntry e = entries.nextElement();
+				switch (pass_number) {
+				case PASS_ANALYZE:
+					if (e.getName().endsWith(".class")) {
+						analyzeClass((zip.getInputStream(e)));
+					}
+					else if(e.getName().endsWith(".jar"))
+					{
+						File tmp = new File("/tmp/classfile");
+						if(tmp.exists())
+							tmp.delete();
+						FileOutputStream fos = new FileOutputStream(tmp);
+						byte buf[] = new byte[1024];
+						int len;
+						InputStream is =zip.getInputStream(e);
+						while((len=is.read(buf)) > 0)
+						{
+							fos.write(buf,0,len);
+						}
+						is.close();
+						fos.close();
+
+						processJar(tmp, new File("/tmp"));
+//						processJar(jar.getInputStream(e), jos);
+					}
+					break;
+				case PASS_OUTPUT:
+					if (e.getName().endsWith(".class") && !e.getName().startsWith("java") && !e.getName().startsWith("org/objenesis")
+							&& !e.getName().startsWith("com/thoughtworks/xstream/") && !e.getName().startsWith("com/rits/cloning")
+							&& !e.getName().startsWith("com/apple/java/Application")) {
+						{
+							ZipEntry outEntry = new ZipEntry(e.getName());
+							zos.putNextEntry(outEntry);
+							byte[] clazz = instrumentClass(zip.getInputStream(e));
+							if(clazz == null)
+							{
+								InputStream is = zip.getInputStream(e);
+								byte[] buffer = new byte[1024];
+								while (true) {
+									int count = is.read(buffer);
+									if (count == -1)
+										break;
+									zos.write(buffer, 0, count);
+								}
+							}
+							else
+									zos.write(clazz);
+							zos.closeEntry();
+						}
+
+					}
+					else if(e.getName().endsWith(".jar"))
+					{
+						ZipEntry outEntry  =new ZipEntry(e.getName());
+//						jos.putNextEntry(outEntry);
+//						try {
+//							processJar(jar.getInputStream(e), jos);
+//							jos.closeEntry();
+//						} catch (FileNotFoundException e1) {
+//							// TODO Auto-generated catch block
+//							e1.printStackTrace();
+//						}
+
+						File tmp = new File("/tmp/classfile");
+						if(tmp.exists())
+							tmp.delete();
+						FileOutputStream fos = new FileOutputStream(tmp);
+						byte buf[] = new byte[1024];
+						int len;
+						InputStream is =zip.getInputStream(e);
+						while((len=is.read(buf)) > 0)
+						{
+							fos.write(buf,0,len);
+						}
+						is.close();
+						fos.close();
+//						System.out.println("Done reading");
+						processJar(tmp, new File("tmp2"));
+
+						zos.putNextEntry(outEntry);
+						is = new FileInputStream("tmp2/classfile");
+						byte[] buffer = new byte[1024];
+						while (true) {
+							int count = is.read(buffer);
+							if (count == -1)
+								break;
+							zos.write(buffer, 0, count);
+						}
+						is.close();
+						zos.closeEntry();
+//						jos.closeEntry();
+					}
+					else {
+						ZipEntry outEntry = new ZipEntry(e.getName());
+						if (e.isDirectory()) {
+							zos.putNextEntry(outEntry);
+							zos.closeEntry();
+						} else if (e.getName().startsWith("META-INF") && (e.getName().endsWith(".SF") || e.getName().endsWith(".RSA"))) {
+							// don't copy this
+						} else if (e.getName().equals("META-INF/MANIFEST.MF")) {
+							Scanner s = new Scanner(zip.getInputStream(e));
+							zos.putNextEntry(outEntry);
+
+							String curPair = "";
+							while (s.hasNextLine()) {
+								String line = s.nextLine();
+								if (line.equals("")) {
+									curPair += "\n";
+									if (!curPair.contains("SHA1-Digest:"))
+										zos.write(curPair.getBytes());
+									curPair = "";
+								} else {
+									curPair += line + "\n";
+								}
+							}
+							s.close();
+							zos.write("\n".getBytes());
+							zos.closeEntry();
+						} else {
+							zos.putNextEntry(outEntry);
+							InputStream is = zip.getInputStream(e);
+							byte[] buffer = new byte[1024];
+							while (true) {
+								int count = is.read(buffer);
+								if (count == -1)
+									break;
+								zos.write(buffer, 0, count);
+							}
+							zos.closeEntry();
+						}
+					}
+				}
+
+			}
 			if (pass_number == PASS_OUTPUT) {
-				jos.close();
+				zos.close();
+				zip.close();
 			}
 		} catch (Exception e) {
 			// TODO Auto-generated catch block
-			logger.error("Unable to process jar" + f, e);
+			logger.error("Unable to process zip" + f, e);
 			System.exit(-1);
 		}

diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/bench/ChroniclerJLogExplorer.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/bench/ChroniclerJLogExplorer.java
index 1059d5f..43ff9d7 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/bench/ChroniclerJLogExplorer.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/bench/ChroniclerJLogExplorer.java
@@ -9,7 +9,7 @@ import edu.columbia.cs.psl.chroniclerj.ExportedSerializableLog;
 public class ChroniclerJLogExplorer {
 	@SuppressWarnings({ "resource", "unused" })
 	public static void main(String[] args) throws Exception {
-		File f = new File("instrumented-test/wallace_serializable_1345072712853.log");
+		File f = new File("instrumented-test/chroniclerj_serializable_1355416858916.log");
 		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
 		ExportedSerializableLog log = (ExportedSerializableLog) ois.readObject();
 		Object[] alog = ExportedSerializableLog.aLog;
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayClassVisitor.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayClassVisitor.java
index bbbb464..10921f6 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayClassVisitor.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayClassVisitor.java
@@ -51,7 +51,7 @@ public class NonDeterministicReplayClassVisitor extends ClassVisitor implements
 			AnalyzerAdapter analyzer = new AnalyzerAdapter(className, acc, name, desc, smv);
 			LocalVariablesSorter sorter = new LocalVariablesSorter(acc, desc, analyzer);
 			NonDeterministicReplayMethodVisitor cloningMV = new NonDeterministicReplayMethodVisitor(Opcodes.ASM4, sorter, acc, name, desc,className,isFirstConstructor, analyzer,
-					classIsCallback(className) && name.equals("<init>"), sorter);
+					classIsCallback(className) && name.equals("<init>"));
 			if(name.equals("<init>"))
 				isFirstConstructor = false;
 			cloningMV.setClassVisitor(this);
@@ -79,6 +79,8 @@ public class NonDeterministicReplayClassVisitor extends ClassVisitor implements
 	{
 		if(NonDeterministicLoggingClassVisitor.callbackClasses.contains(className))
 			return true;
+		if(className.equals("java/lang/Object"))
+			return false;
 		if(!Instrumenter.instrumentedClasses.containsKey(className))
 		{
 			try{
@@ -104,7 +106,10 @@ public class NonDeterministicReplayClassVisitor extends ClassVisitor implements
 			if(NonDeterministicLoggingClassVisitor.callbackClasses.contains(((String)s)))
 				return true;
 		}
-		return classIsCallback(cn.superName);
+		if(cn.superName.equals(cn.name) || cn.superName.equals("java/lang/Object") || cn.name.equals("org/eclipse/jdt/core/compiler/BuildContext"))
+			return false;
+		else
+			return classIsCallback(cn.superName);
 	}
 	public static boolean methodIsCallback(String className, String name, String desc)
 	{
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayMethodVisitor.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayMethodVisitor.java
index e225db7..89de88d 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayMethodVisitor.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/NonDeterministicReplayMethodVisitor.java
@@ -9,7 +9,9 @@ import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.Type;
+import org.objectweb.asm.commons.AdviceAdapter;
 import org.objectweb.asm.commons.AnalyzerAdapter;
+import org.objectweb.asm.commons.GeneratorAdapter;
 import org.objectweb.asm.commons.LocalVariablesSorter;
 import org.objectweb.asm.tree.MethodInsnNode;

@@ -23,7 +25,7 @@ import edu.columbia.cs.psl.chroniclerj.MethodCall;
 import edu.columbia.cs.psl.chroniclerj.visitor.CloningAdviceAdapter;
 import edu.columbia.cs.psl.chroniclerj.visitor.NonDeterministicLoggingMethodVisitor;

-public class NonDeterministicReplayMethodVisitor extends CloningAdviceAdapter implements Constants {
+public class NonDeterministicReplayMethodVisitor extends AdviceAdapter implements Opcodes  {
 	private static Logger logger = Logger.getLogger(NonDeterministicReplayMethodVisitor.class);
 	private String name;
 	private String desc;
@@ -45,8 +47,8 @@ public class NonDeterministicReplayMethodVisitor extends CloningAdviceAdapter im
 	AnalyzerAdapter analyzer;

 	protected NonDeterministicReplayMethodVisitor(int api, MethodVisitor mv, int access, String name, String desc, String classDesc, boolean isFirstConstructor, AnalyzerAdapter analyzer,
-			boolean isCallbackInit, LocalVariablesSorter sorter) {
-		super(api, mv, access, name, desc, classDesc, sorter);
+			boolean isCallbackInit) {
+		super(api,mv,access,name,desc);
 		this.name = name;
 		this.desc = desc;
 		this.classDesc = classDesc;
@@ -340,14 +342,16 @@ public class NonDeterministicReplayMethodVisitor extends CloningAdviceAdapter im
 		} catch (Exception ex) {
 			logger.error("Unable to instrument method call", ex);
 		}
-		if(this.name.equals("<init>") && !inited && isCallbackInit)
+	}
+	@Override
+	protected void onMethodEnter() {
+		if(this.name.equals("<init>") && isCallbackInit)
 		{
-			loadThis();
+			super.visitVarInsn(ALOAD, 0);
 			super.visitMethodInsn(INVOKESTATIC, Type.getInternalName(CallbackRegistry.class), "register", "(Ljava/lang/Object;)V");
 			inited = true;
 		}
 	}
-
 	private ArrayList<MethodCall> methodCallsToClear = new ArrayList<MethodCall>();


diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayRunner.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayRunner.java
index c4ec1d2..45ac3d6 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayRunner.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayRunner.java
@@ -61,11 +61,14 @@ public class ReplayRunner {
 				{
 					if(e != null && e.getClass().equals(CallbackInvocation.class))
 					{
+//						System.out.println(e);
 						CallbackInvocation ci = (CallbackInvocation) e;
 						ReplayUtils.dispatchesToRun.put(ci.getClock(), ci);
 					}
 				}
 			}
+//			System.out.println(ExportedSerializableLog.aLog_fill);
+//			System.out.println(ExportedLog.aLog_fill);
 		} catch (Exception exi) {
 			exi.printStackTrace();
 		}
@@ -136,6 +139,7 @@ public class ReplayRunner {
 			toRun = loader.loadClass(mainClass.replace("/", "."));
 			Method meth = toRun.getMethod("main", String[].class);
 			meth.invoke(null, new Object[] { params });
+
 		} catch (ClassNotFoundException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayUtils.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayUtils.java
index 1c351e7..2ed6ce4 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayUtils.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/ReplayUtils.java
@@ -77,6 +77,8 @@ public class ReplayUtils {
 		}

 		checkForDispatch();
+		if(threadEntries[r] == null)
+			System.exit(-1);
 		if(threadEntries[r].equals(threadName))
 		{
 			replayIndexMap.put(threadName, r);
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/Replayer.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/Replayer.java
index da76185..d357b25 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/Replayer.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/replay/Replayer.java
@@ -22,6 +22,7 @@ import org.apache.log4j.Logger;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.commons.SerialVersionUIDAdder;
 import org.objectweb.asm.tree.ClassNode;

 import edu.columbia.cs.psl.chroniclerj.Instrumenter;
@@ -64,6 +65,13 @@ public class Replayer {
 	private static byte[] instrumentClass(InputStream is) {
 		try {
 			ClassReader cr = new ClassReader(is);
+			{
+				ClassWriter cw = new ClassWriter(cr, 0);
+				SerialVersionUIDAdder uidAdder = new SerialVersionUIDAdder(cw);
+				cr.accept(uidAdder, 0);
+				byte[] b = cw.toByteArray();
+				cr = new ClassReader(b);
+			}
 			ClassWriter cw = new InstrumenterClassWriter(cr,
 					ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES,
 					Instrumenter.loader);
@@ -248,7 +256,7 @@ public class Replayer {
 									"com/thoughtworks/xstream/")
 							&& !e.getName().startsWith("com/rits/cloning")
 							&& !e.getName().startsWith(
-									"com/apple/java/Application")) {
+									"com/apple/java/Application") && !e.getName().startsWith("net/sf/cglib/")) {
 						{
 							JarEntry outEntry = new JarEntry(e.getName());
 							jos.putNextEntry(outEntry);
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CallbackLoggingMethodVisitor.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CallbackLoggingMethodVisitor.java
index ef0f02a..29695fe 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CallbackLoggingMethodVisitor.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CallbackLoggingMethodVisitor.java
@@ -3,6 +3,7 @@ package edu.columbia.cs.psl.chroniclerj.visitor;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.Type;
+import org.objectweb.asm.commons.AdviceAdapter;
 import org.objectweb.asm.commons.GeneratorAdapter;
 import org.objectweb.asm.commons.LocalVariablesSorter;

@@ -10,7 +11,7 @@ import edu.columbia.cs.psl.chroniclerj.CallbackInvocation;
 import edu.columbia.cs.psl.chroniclerj.CallbackRegistry;
 import edu.columbia.cs.psl.chroniclerj.Log;

-public class CallbackLoggingMethodVisitor extends GeneratorAdapter implements Opcodes {
+public class CallbackLoggingMethodVisitor extends AdviceAdapter implements Opcodes {

 	private String className;
 	private String methodName;
@@ -18,7 +19,7 @@ public class CallbackLoggingMethodVisitor extends GeneratorAdapter implements Op
 	private boolean isCallback;
 	private boolean isInit;
 	private CloningAdviceAdapter caa;
-	private boolean initialized;
+
 	public CallbackLoggingMethodVisitor(int api, MethodVisitor mv, int access, String name, String desc, String classname, LocalVariablesSorter lvsorter, CloningAdviceAdapter caa) {
 		super(api, mv, access, name, desc);
 		this.className = classname;
@@ -26,36 +27,34 @@ public class CallbackLoggingMethodVisitor extends GeneratorAdapter implements Op
 		this.methodDesc = desc;
 		this.isInit = name.equals("<init>");
 		this.isCallback = NonDeterministicLoggingClassVisitor.methodIsCallback(classname, name, desc);
-		this.caa = caa;
+		this.caa = caa;
 	}

 	@Override
-	public void visitMethodInsn(int opcode, String owner, String name, String desc) {
-		super.visitMethodInsn(opcode, owner, name, desc);
-		if(opcode == INVOKESPECIAL && !initialized && isInit)
-		{
-			loadThis();
-			visitMethodInsn(INVOKESTATIC, Type.getInternalName(CallbackRegistry.class), "register", "(Ljava/lang/Object;)V");
-			initialized = true;
+	protected void onMethodEnter() {
+		if (this.isInit) {
+			super.visitVarInsn(ALOAD, 0);
+			super.visitMethodInsn(INVOKESTATIC, Type.getInternalName(CallbackRegistry.class), "register", "(Ljava/lang/Object;)V");
 		}
 	}
-
+
 	@Override
 	public void visitCode() {
 		super.visitCode();
 		if (this.isCallback) {
-			visitTypeInsn(NEW, Type.getInternalName(CallbackInvocation.class));
-			visitInsn(DUP);
-			visitLdcInsn(className);
-			visitLdcInsn(methodName);
-			visitLdcInsn(methodDesc);
-			loadArgArray();
-			loadThis();
-			visitMethodInsn(INVOKESPECIAL, Type.getInternalName(CallbackInvocation.class), "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/Object;)V");
-			caa.logValueAtTopOfStackToArray(Type.getInternalName(Log.class), "aLog", "[Ljava/lang/Object;", Type.getType(Object.class), true, "callback\t" + className + "."+methodName+methodDesc+"\t", false);
-			visitInsn(POP);
+			super.visitTypeInsn(NEW, Type.getInternalName(CallbackInvocation.class));
+			super.visitInsn(DUP);
+			super.visitLdcInsn(className);
+			super.visitLdcInsn(methodName);
+			super.visitLdcInsn(methodDesc);
+			super.loadArgArray();
+			super.loadThis();
+			super.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(CallbackInvocation.class), "<init>",
+					"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/Object;)V");
+			caa.logValueAtTopOfStackToArrayNoDup(Type.getInternalName(Log.class), "aLog", "[Ljava/lang/Object;", Type.getType(Object.class), true, "callback\t" + className + "." + methodName + methodDesc
+					+ "\t", false, true);
+//			super.visitInsn(POP);
 		}
 	}

-
 }
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CloningAdviceAdapter.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CloningAdviceAdapter.java
index a4b3188..1226c4a 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CloningAdviceAdapter.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/CloningAdviceAdapter.java
@@ -50,9 +50,8 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {

 	private LocalVariablesSorter lvsorter;

-	public CloningAdviceAdapter(int api, MethodVisitor mv, int access, String name, String desc, String classname, LocalVariablesSorter lvsorter) {
+	public CloningAdviceAdapter(int api, MethodVisitor mv, int access, String name, String desc, String classname) {
 		super(api, mv, access, name, desc);
-		this.lvsorter = lvsorter;
 	}

 	/**
@@ -92,12 +91,12 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 		// fieldType.getElementType().getSort()
 		// ||
 		fieldType.getSort() == Type.VOID || (fieldType.getSort() != Type.ARRAY && (fieldType.getSort() != Type.OBJECT || immutableClasses.contains(typeOfField)))) {
-//			 println("reference> " + debug);
+//						 println("reference> " + debug);
 			return;
 		}
 		if (fieldType.getSort() == Type.ARRAY) {
 			if (fieldType.getElementType().getSort() != Type.OBJECT || immutableClasses.contains(fieldType.getElementType().getDescriptor())) {
-//				 println("array> " + debug);
+//								 println("array> " + debug);

 				// Just need to duplicate the array
 				dup();
@@ -130,7 +129,7 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 				visitLabel(noNeedToPop);

 			} else {
-				// println("heavy> " + debug);
+//				 println("heavy> " + debug);
 				// Just use the reflective cloner
 				visitLdcInsn(debug);
 				invokeStatic(Type.getType(CloningUtils.class), Method.getMethod("Object clone(Object, String)"));
@@ -139,23 +138,43 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 		} else if (fieldType.getClassName().contains("InputStream") || fieldType.getClassName().contains("OutputStream") || fieldType.getClassName().contains("Socket")) {
 			// Do nothing
 		} else {
-			// println("heavy> " + debug);
+//			 println("heavy> " + debug);
 			visitLdcInsn(debug);
 			invokeStatic(Type.getType(CloningUtils.class), Method.getMethod("Object clone(Object, String)"));
 			checkCast(fieldType);

 		}
 	}
-
 	protected void logValueAtTopOfStackToArray(String logFieldOwner, String logFieldName, String logFieldTypeDesc, Type elementType, boolean isStaticLoggingField, String debug,
-			boolean secondElHasArrayLen) {
+			boolean secondElHasArrayLen, boolean doLocking) {
+		if(secondElHasArrayLen)
+		{
+			dupX1();
+//			swap(); //data, size
+//			dupX1(); //size, data, size
+//			swap(); //size, size, data
+//			dupX2(); //size, data ,size, data
+		}
+		else
+		{
+		if(elementType.getSize() == 1)
+			dup(); //size?, data,size?,  data
+		else
+			dup2();
+		}
+		cloneValAtTopOfStack(elementType.getDescriptor(), debug, secondElHasArrayLen);
+		logValueAtTopOfStackToArrayNoDup(logFieldOwner, logFieldName, logFieldTypeDesc, elementType, isStaticLoggingField, debug, secondElHasArrayLen, doLocking);
+	}
+	protected void logValueAtTopOfStackToArrayNoDup(String logFieldOwner, String logFieldName, String logFieldTypeDesc, Type elementType, boolean isStaticLoggingField, String debug,
+			boolean secondElHasArrayLen, boolean doLocking) {
 		int getOpcode = (isStaticLoggingField ? Opcodes.GETSTATIC : Opcodes.GETFIELD);
 		int putOpcode = (isStaticLoggingField ? Opcodes.PUTSTATIC : Opcodes.PUTFIELD);
-
+
 		//Lock
-		super.visitFieldInsn(GETSTATIC, Type.getInternalName(Log.class), "logLock", Type.getDescriptor(Lock.class));
-		super.visitMethodInsn(INVOKEINTERFACE, Type.getInternalName(Lock.class), "lock", "()V");
-
+		if (doLocking) {
+			super.visitFieldInsn(GETSTATIC, Type.getInternalName(Log.class), "logLock", Type.getDescriptor(Lock.class));
+			super.visitMethodInsn(INVOKEINTERFACE, Type.getInternalName(Lock.class), "lock", "()V");
+		}
 		// Grow the array if necessary

 		super.visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_fill", Type.INT_TYPE.getDescriptor());
@@ -194,9 +213,9 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {

 		loadLocal(newArray);
 		visitFieldInsn(putOpcode, logFieldOwner, logFieldName, logFieldTypeDesc);
-
+
 		int newArray2 = lvsorter.newLocal(Type.getType("[Ljava/lang/String;"));
-		visitFieldInsn(getOpcode, logFieldOwner, logFieldName+"_owners", "[Ljava/lang/String;");
+		visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_owners", "[Ljava/lang/String;");
 		arrayLength();
 		visitInsn(Opcodes.I2D);
 		visitLdcInsn(Constants.LOG_GROWTH_RATE);
@@ -204,53 +223,53 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 		visitInsn(Opcodes.D2I);

 		newArray(Type.getType("Ljava/lang/String;"));
-
+
 		storeLocal(newArray2, Type.getType("[Ljava/lang/String;"));
-		visitFieldInsn(getOpcode, logFieldOwner, logFieldName+"_owners", "[Ljava/lang/String;");
+		visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_owners", "[Ljava/lang/String;");
 		visitInsn(Opcodes.ICONST_0);
 		loadLocal(newArray2);
 		visitInsn(Opcodes.ICONST_0);
-		visitFieldInsn(getOpcode, logFieldOwner, logFieldName+"_owners", "[Ljava/lang/String;");
+		visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_owners", "[Ljava/lang/String;");
 		arrayLength();
 		visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");

 		// array = newarray

 		loadLocal(newArray2);
-		visitFieldInsn(putOpcode, logFieldOwner, logFieldName+"_owners", "[Ljava/lang/String;");
+		visitFieldInsn(putOpcode, logFieldOwner, logFieldName + "_owners", "[Ljava/lang/String;");

 		visitLabel(labelForNoNeedToGrow);
 		// Load this into the end piece of the array
 		if (elementType.getSize() == 1) {
-			if (secondElHasArrayLen) {
-				/*
-				 * size buf
-				 */
-				dupX1();
-				/*
-				 * buf size buf
-				 */
-				visitFieldInsn(getOpcode, logFieldOwner, logFieldName, logFieldTypeDesc);
-				dupX2();
-				pop();
-				/*
-				 * buf logfield size buf
-				 */
-				visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_fill", Type.INT_TYPE.getDescriptor());
-				dupX2();
-				pop();
-				/*
-				 * buf logfield logsize size buf
-				 */
-			} else {
-				dup();
+//			if (secondElHasArrayLen) {
+//				/*
+//				 * size buf
+//				 */
+//				dupX1();
+//				/*
+//				 * buf size buf
+//				 */
+//				visitFieldInsn(getOpcode, logFieldOwner, logFieldName, logFieldTypeDesc);
+//				dupX2();
+//				pop();
+//				/*
+//				 * buf logfield size buf
+//				 */
+//				visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_fill", Type.INT_TYPE.getDescriptor());
+//				dupX2();
+//				pop();
+//				/*
+//				 * buf logfield logsize size buf
+//				 */
+//			} else {
+//				dup();
 				visitFieldInsn(getOpcode, logFieldOwner, logFieldName, logFieldTypeDesc);
 				swap();
 				visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_fill", Type.INT_TYPE.getDescriptor());
 				swap();
-			}
+//			}
 		} else if (elementType.getSize() == 2) {
-			dup2();
+//			dup2();
 			if (!isStaticLoggingField)
 				super.loadThis();
 			super.visitFieldInsn(getOpcode, logFieldOwner, logFieldName, logFieldTypeDesc);
@@ -262,17 +281,15 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 			dupX2();
 			pop();
 		}
-		cloneValAtTopOfStack(elementType.getDescriptor(), debug, secondElHasArrayLen);

 		arrayStore(elementType);
-
-		visitFieldInsn(getOpcode, logFieldOwner, logFieldName+"_owners", "[Ljava/lang/String;");
+
+		visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_owners", "[Ljava/lang/String;");
 		visitFieldInsn(getOpcode, logFieldOwner, logFieldName + "_fill", Type.INT_TYPE.getDescriptor());

-		if(debug.startsWith("callback"))
+		if (debug.startsWith("callback"))
 			visitLdcInsn("callback-handler");
-		else
-		{
+		else {
 			visitMethodInsn(INVOKESTATIC, "java/lang/Thread", "currentThread", "()Ljava/lang/Thread;");
 			visitMethodInsn(INVOKEVIRTUAL, "java/lang/Thread", "getName", "()Ljava/lang/String;");
 		}
@@ -300,11 +317,11 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 		// visitLabel(monitorEndLabel);
 		Label endLbl = new Label();

-//		if (elementType.getSort() == Type.ARRAY) {
-//			super.visitInsn(DUP);
-//			super.visitInsn(ARRAYLENGTH);
-//		} else
-			super.visitInsn(ICONST_1);
+		//		if (elementType.getSort() == Type.ARRAY) {
+		//			super.visitInsn(DUP);
+		//			super.visitInsn(ARRAYLENGTH);
+		//		} else
+		super.visitInsn(ICONST_1);
 		// super.visitVarInsn(ALOAD, monitorIndx);
 		// super.monitorEnter();
 		super.visitFieldInsn(getOpcode, logFieldOwner, "logsize", Type.INT_TYPE.getDescriptor());
@@ -324,16 +341,16 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 			super.visitMethodInsn(INVOKESTATIC, Type.getInternalName(ChroniclerJExportRunner.class), "_export", "()V");
 		// super.visitVarInsn(ALOAD, monitorIndx);
 		// super.monitorEnter();
-//		super.visitFieldInsn(getOpcode, logFieldOwner, "logsize", Type.INT_TYPE.getDescriptor());
-//		super.visitLdcInsn(Constants.VERY_MAX_LOG_SIZE);
-//		super.visitJumpInsn(IF_ICMPLE, endLbl);
+		//		super.visitFieldInsn(getOpcode, logFieldOwner, "logsize", Type.INT_TYPE.getDescriptor());
+		//		super.visitLdcInsn(Constants.VERY_MAX_LOG_SIZE);
+		//		super.visitJumpInsn(IF_ICMPLE, endLbl);

 		// println("GOing to wait for " + logFieldOwner);
 		// super.visitLabel(tryStart);

-//		super.visitFieldInsn(Opcodes.GETSTATIC, Type.getInternalName(Log.class), "lock", "Ljava/lang/Object;");
-//		super.visitLdcInsn(500L);
-//		super.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "wait", "(J)V");
+		//		super.visitFieldInsn(Opcodes.GETSTATIC, Type.getInternalName(Log.class), "lock", "Ljava/lang/Object;");
+		//		super.visitLdcInsn(500L);
+		//		super.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "wait", "(J)V");

 		// super.visitLabel(tryEnd);

@@ -343,10 +360,12 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {
 		// super.visitVarInsn(ASTORE, n);
 		// super.visitInsn(POP);
 		visitLabel(endLbl);
-//		super.visitVarInsn(ALOAD, monitorIndx);
-//		super.monitorExit();
-		super.visitFieldInsn(GETSTATIC, Type.getInternalName(Log.class), "logLock", Type.getDescriptor(Lock.class));
-		super.visitMethodInsn(INVOKEINTERFACE, Type.getInternalName(Lock.class), "unlock", "()V");
+		//		super.visitVarInsn(ALOAD, monitorIndx);
+		//		super.monitorExit();
+		if (doLocking) {
+			super.visitFieldInsn(GETSTATIC, Type.getInternalName(Log.class), "logLock", Type.getDescriptor(Lock.class));
+			super.visitMethodInsn(INVOKEINTERFACE, Type.getInternalName(Lock.class), "unlock", "()V");
+		}
 		// super.visitLocalVariable(logFieldName + "_monitor",
 		// "Ljava/lang/Object;", null, monitorStart, monitorEndLabel,
 		// monitorIndx);
@@ -354,5 +373,8 @@ public class CloningAdviceAdapter extends GeneratorAdapter implements Opcodes {

 	}

+	public void setLocalVariableSorter(LocalVariablesSorter smv) {
+		this.lvsorter = smv;
+	}

 }
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingClassVisitor.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingClassVisitor.java
index 0e2393d..1c4c220 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingClassVisitor.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingClassVisitor.java
@@ -32,17 +32,16 @@ public class NonDeterministicLoggingClassVisitor extends ClassVisitor implements
 	public static HashSet<String> callbackMethods = new HashSet<String>();
 	static
 	{
-		File f = new File("listenerMethods.txt");
 		Scanner s;
 		try {
-			s = new Scanner(f);
+			s = new Scanner(NonDeterministicLoggingClassVisitor.class.getClassLoader().getResourceAsStream("listenerMethods.txt"));
 			while (s.hasNextLine())
 			{
 				String l = s.nextLine();
 				callbackMethods.add(l);
 				callbackClasses.add(l.substring(0,l.indexOf(".")));
 			}
-		} catch (FileNotFoundException e) {
+		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
@@ -69,7 +68,9 @@ public class NonDeterministicLoggingClassVisitor extends ClassVisitor implements
 	{
 		if(callbackClasses.contains(className))
 			return true;
-		if(!Instrumenter.instrumentedClasses.containsKey(className) || className.equals("java/lang/Object"))
+		if(className.equals("java/lang/Object"))
+			return false;
+		if(!Instrumenter.instrumentedClasses.containsKey(className))
 		{
 			try{
 				Class<?> c = Instrumenter.loader.loadClass(className.replace("/", "."));
@@ -94,7 +95,10 @@ public class NonDeterministicLoggingClassVisitor extends ClassVisitor implements
 			if(callbackClasses.contains(((String)s)))
 				return true;
 		}
-		return classIsCallback(cn.superName);
+		if(cn.superName.equals(cn.name) || cn.superName.equals("java/lang/Object") || cn.name.equals("org/eclipse/jdt/core/compiler/BuildContext"))
+			return false;
+		else
+			return classIsCallback(cn.superName);
 	}
 	public static boolean methodIsCallback(String className, String name, String desc)
 	{
@@ -143,10 +147,11 @@ public class NonDeterministicLoggingClassVisitor extends ClassVisitor implements
 		{
 			AnalyzerAdapter analyzer = new AnalyzerAdapter(className, acc, name, desc, smv);
 			JSRInlinerAdapter mv = new JSRInlinerAdapter(analyzer, acc, name, desc, signature, exceptions);
-			LocalVariablesSorter sorter = new LocalVariablesSorter(acc, desc, mv);
-			CloningAdviceAdapter caa = new CloningAdviceAdapter(Opcodes.ASM4, sorter, acc, name, desc, className, sorter);
+			CloningAdviceAdapter caa = new CloningAdviceAdapter(Opcodes.ASM4, mv, acc, name, desc, className);
 			smv = new CallbackLoggingMethodVisitor(Opcodes.ASM4,caa, acc, name, desc, className, null,caa);
 			smv = new JSRInlinerAdapter(smv, acc, name, desc, signature, exceptions);
+			smv = new LocalVariablesSorter(acc, desc, smv);
+			caa.setLocalVariableSorter((LocalVariablesSorter) smv);

 		}
 		if (isAClass && !name.equals(Constants.INNER_COPY_METHOD_NAME) && !name.equals(Constants.OUTER_COPY_METHOD_NAME) && !name.equals(Constants.SET_FIELDS_METHOD_NAME)
@@ -156,18 +161,18 @@ public class NonDeterministicLoggingClassVisitor extends ClassVisitor implements

 			AnalyzerAdapter analyzer = new AnalyzerAdapter(className, acc, name, desc, smv);
 			JSRInlinerAdapter mv = new JSRInlinerAdapter(analyzer, acc, name, desc, signature, exceptions);
-			LocalVariablesSorter sorter = new LocalVariablesSorter(acc, desc, mv);
 //			LocalVariablesSorter sorter  = new LocalVariablesSorter(acc, desc, analyzer);

 			// CheckMethodAdapter cmv = new CheckMethodAdapter(mv);

-			NonDeterministicLoggingMethodVisitor cloningMV = new NonDeterministicLoggingMethodVisitor(Opcodes.ASM4, sorter, acc, name, desc, className, isFirstConstructor, analyzer, sorter);
+			NonDeterministicLoggingMethodVisitor cloningMV = new NonDeterministicLoggingMethodVisitor(Opcodes.ASM4, mv, acc, name, desc, className, isFirstConstructor, analyzer);
 			if (name.equals("<init>"))
 				isFirstConstructor = false;
 			cloningMV.setClassVisitor(this);
 			JSRInlinerAdapter mv2 = new JSRInlinerAdapter(cloningMV, acc, name, desc, signature, exceptions);
-
-			return mv2;
+			LocalVariablesSorter sorter = new LocalVariablesSorter(acc, desc, mv2);
+			cloningMV.setLocalVariableSorter(sorter);
+			return sorter;
 		} else
 			return smv;
 	}
@@ -206,25 +211,26 @@ public class NonDeterministicLoggingClassVisitor extends ClassVisitor implements
 				captureDesc += ")" + Type.getReturnType(mi.desc).getDescriptor();
 			}
 			MethodVisitor mv = super.visitMethod(opcode, mc.getCapturePrefix() + "_capture", captureDesc, null, null);
-			LocalVariablesSorter lvs = new LocalVariablesSorter(opcode, captureDesc, mv);
-			CloningAdviceAdapter caa = new CloningAdviceAdapter(Opcodes.ASM4, lvs, opcode, mc.getCapturePrefix() + "_capture", captureDesc, className,lvs);
+			CloningAdviceAdapter caa = new CloningAdviceAdapter(Opcodes.ASM4, mv, opcode, mc.getCapturePrefix() + "_capture", captureDesc, className);
+			LocalVariablesSorter lvs = new LocalVariablesSorter(opcode, captureDesc, caa);
+			caa.setLocalVariableSorter(lvs);
 			Type[] args = Type.getArgumentTypes(captureDesc);
 			if(mi.name.equals("<init>"))
 			{
 				for (int i = 0; i < args.length; i++) {
 					caa.loadArg(i);
 				}
-				caa.visitMethodInsn(Opcodes.INVOKESPECIAL, mi.owner, mi.name, mi.desc);
+				lvs.visitMethodInsn(Opcodes.INVOKESPECIAL, mi.owner, mi.name, mi.desc);
 				caa.loadArg(0);
 			}
 			else
 			{
-				if(opcode == Opcodes.ACC_PRIVATE)
+				if((opcode & Opcodes.ACC_STATIC) == 0)
 					caa.loadThis();
 				for (int i = 0; i < args.length; i++) {
 					caa.loadArg(i);
 				}
-				caa.visitMethodInsn(mi.getOpcode(), mi.owner, mi.name, mi.desc);
+				lvs.visitMethodInsn(mi.getOpcode(), mi.owner, mi.name, mi.desc);
 				for (int i = 0; i < args.length; i++) {
 					if (args[i].getSort() == Type.ARRAY) {
 						boolean minimalCopy = (Type.getReturnType(methodDesc).getSort() == Type.INT);
@@ -243,7 +249,7 @@ public class NonDeterministicLoggingClassVisitor extends ClassVisitor implements
 						caa.loadArg(i);
 						//- (mi.getOpcode() == Opcodes.INVOKESTATIC ? 0 : 1)
 						caa.logValueAtTopOfStackToArray(MethodCall.getLogClassName(args[i]), "aLog", "[Ljava/lang/Object;",
-								args[i], true, mi.owner+"."+mi.name+"->_"+i+"\t"+args[i].getDescriptor()+"\t\t"+className,minimalCopy);
+								args[i], true, mi.owner+"."+mi.name+"->_"+i+"\t"+args[i].getDescriptor()+"\t\t"+className,minimalCopy,false);
 						if (args[i].getSize() == 1)
 							caa.pop();
 						else
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingMethodVisitor.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingMethodVisitor.java
index b0295f8..afca16a 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingMethodVisitor.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/visitor/NonDeterministicLoggingMethodVisitor.java
@@ -19,8 +19,9 @@ import org.objectweb.asm.tree.MethodInsnNode;
 import edu.columbia.cs.psl.chroniclerj.Constants;
 import edu.columbia.cs.psl.chroniclerj.Instrumenter;
 import edu.columbia.cs.psl.chroniclerj.MethodCall;
+import edu.columbia.cs.psl.chroniclerj.replay.NonDeterministicReplayMethodVisitor;

-public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter implements Constants {
+public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter {
 	private static Logger			logger					= Logger.getLogger(NonDeterministicLoggingMethodVisitor.class);
 	private String					name;
 	private String					desc;
@@ -40,13 +41,12 @@ public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter i
 		nonDeterministicMethods.add(owner + "." + name + ":" + desc);
 	}
 	static {
-		File f = new File("nondeterministic-methods.txt");
 		Scanner s;
 		try {
-			s = new Scanner(f);
+			s = new Scanner(NonDeterministicReplayMethodVisitor.class.getClassLoader().getResourceAsStream("nondeterministic-methods.txt"));
 			while (s.hasNextLine())
 				nonDeterministicMethods.add(s.nextLine());
-		} catch (FileNotFoundException e) {
+		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
@@ -61,8 +61,8 @@ public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter i
 	private boolean	isFirstConstructor;

 	protected NonDeterministicLoggingMethodVisitor(int api, MethodVisitor mv, int access, String name, String desc, String classDesc,
-			boolean isFirstConstructor, AnalyzerAdapter analyzer, LocalVariablesSorter lvs) {
-		super(api, mv, access, name, desc,classDesc, lvs);
+			boolean isFirstConstructor, AnalyzerAdapter analyzer) {
+		super(api, mv, access, name, desc,classDesc);
 		this.name = name;
 		this.desc = desc;
 		this.classDesc = classDesc;
@@ -100,7 +100,10 @@ public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter i
 	@Override
 	public void visitMethodInsn(int opcode, String owner, String name, String desc) {
 		try {
-
+			if(Instrumenter.instrumentedClasses.get(classDesc) == null)
+			{
+				System.err.println("No class info for " + classDesc);
+			}
 			MethodCall m = new MethodCall(this.name, this.desc, this.classDesc, pc, lineNumber, owner, name, desc, isStatic);
 			Type returnType = Type.getMethodType(desc).getReturnType();
 			if ((!constructor || isFirstConstructor || superInitialized) && !returnType.equals(Type.VOID_TYPE)
@@ -110,7 +113,7 @@ public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter i
 				Type[] args = Type.getArgumentTypes(desc);
 				boolean hasArray = false;
 				for(Type t : args)
-					if(t.getSort() == Type.ARRAY && !name.contains("write"))
+					if(t.getSort() == Type.ARRAY && !name.contains("write") && !name.contains("invoke"))
 						hasArray = true;

 				if(hasArray)
@@ -133,13 +136,13 @@ public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter i
 					}
 					mv.visitMethodInsn(invokeOpcode, classDesc, m.getCapturePrefix()+"_capture", captureDesc);
 					logValueAtTopOfStackToArray(m.getLogClassName(), m.getLogFieldName(), m.getLogFieldType().getDescriptor(), returnType, true,
-							owner+"."+name + "\t" + desc+"\t\t"+classDesc+"."+this.name,false);
+							owner+"."+name + "\t" + desc+"\t\t"+classDesc+"."+this.name,false,true);
 				}
 				else
 				{
 					mv.visitMethodInsn(opcode, owner, name, desc);
 					logValueAtTopOfStackToArray(m.getLogClassName(), m.getLogFieldName(), m.getLogFieldType().getDescriptor(), returnType, true,
-							owner+"."+name + "\t" + desc+"\t\t"+classDesc+"."+this.name,false);
+							owner+"."+name + "\t" + desc+"\t\t"+classDesc+"."+this.name,false,true);
 				}
 			}
 			else if(opcode == INVOKESPECIAL && name.equals("<init>") && nonDeterministicMethods.contains(owner + "." + name + ":" + desc) && !(owner.equals(Instrumenter.instrumentedClasses.get(classDesc).superName)
@@ -147,7 +150,7 @@ public class NonDeterministicLoggingMethodVisitor extends CloningAdviceAdapter i
 				super.visitMethodInsn(opcode, owner, name, desc);
 				if(analyzer.stack != null && analyzer.stack.size() > 0 && analyzer.stack.get(analyzer.stack.size()-1).equals(owner))
 					logValueAtTopOfStackToArray(MethodCall.getLogClassName(Type.getType("L"+owner+";")), "aLog", "[Ljava/lang/Object;", Type.getType("L"+owner+";"), true,
-							owner+"."+name + "\t" + desc+"\t\t"+classDesc+"."+this.name,false);
+							owner+"."+name + "\t" + desc+"\t\t"+classDesc+"."+this.name,false,true);

 			}
 			else
diff --git a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/xstream/CatchClassErrorFieldDictionary.java b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/xstream/CatchClassErrorFieldDictionary.java
index 7ce7e89..2be436f 100644
--- a/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/xstream/CatchClassErrorFieldDictionary.java
+++ b/Code/ChroniclerJ/src/edu/columbia/cs/psl/chroniclerj/xstream/CatchClassErrorFieldDictionary.java
@@ -107,7 +107,7 @@ public class CatchClassErrorFieldDictionary extends FieldDictionary {
 	private Map buildMap(final Class type, boolean tupleKeyed) {
         final Map result;
         Class cls = type;
-        synchronized (this) {
+//        synchronized (this) {
             if (!keyedByFieldNameCache.containsKey(type)) {
                 final List superClasses = new ArrayList();
                 while (!Object.class.equals(cls)) {
@@ -169,11 +169,11 @@ public class CatchClassErrorFieldDictionary extends FieldDictionary {
                     ? keyedByFieldKeyCache.get(type)
                     : keyedByFieldNameCache.get(type));
             }
-        }
+//        }
         return result;
     }

-    public synchronized void flushCache() {
+    public void flushCache() {
         Set objectTypeSet = Collections.singleton(Object.class);
         keyedByFieldNameCache.keySet().retainAll(objectTypeSet);
         keyedByFieldKeyCache.keySet().retainAll(objectTypeSet);