docs: public int doMergeData(Object objData)
      {
      	FieldDataScratchHandler listener = (FieldDataScratchHandler)this.getListener(FieldDataScratchHandler.class, false);
      	if (listener == null)
      		return super.doMergeData(objData);
      	String strOrigProperties = (String)listener.getOriginalData();
      	Map<String,Object> propRead = this.getProperties();                                // Disk image (with updates from others)
      	Map<String,Object> propOrig = this.internalStringToProperties(strOrigProperties);  // Before I made any changes
      	Map<String,Object> propCurrent = this.internalStringToProperties((String)objData);     // Current image (with my changes)
          Map<String,Object> propNew = new Hashtable<String,Object>();     // New image (with my changes)
          Utility.getLogger().info("propRead:    " + propRead);
          Utility.getLogger().info("propOrig:    " + propOrig);
          Utility.getLogger().info("propCurrent: " + propCurrent);
      	// Step 1 Move all current values to the new map, unless the value didn't change, then use the read value
          boolean bOrigChange = false;
      	for (String strKey : propCurrent.keySet())
      	{
              String strCurrentValue = (String)propCurrent.get(strKey);
      		String strOrigValue = (String)propOrig.get(strKey);
      		String strReadValue = (String)propRead.get(strKey);
      		String strNewValue = this.getNewValue(strKey, strReadValue, strOrigValue, strCurrentValue);
              if (strNewValue != null)
                  propNew.put(strKey, strNewValue);
              if (strNewValue == strReadValue)
                  bOrigChange = this.updateOrigKey(propOrig, strKey, strOrigValue, strNewValue, bOrigChange);
      	}
      	// Step 2 Delete any values that were deleted (changed) from the read version
          for (String strKey : propRead.keySet())
          {
              String strCurrentValue = (String)propCurrent.get(strKey);
              if (strCurrentValue == null)
              {   // Only looking at the ones that have been deleted since the read. (since I already handled the current ones)
                  String strOrigValue = (String)propOrig.get(strKey);
                  String strReadValue = (String)propRead.get(strKey);
                  String strNewValue = this.getNewValue(strKey, strReadValue, strOrigValue, strCurrentValue);
                  if (strNewValue != null)
                      propNew.put(strKey, strNewValue);
                  if (strNewValue == strReadValue)
                      bOrigChange = this.updateOrigKey(propOrig, strKey, strOrigValue, strNewValue, bOrigChange);
              }
      	}
          if (bOrigChange)
              listener.setOriginalData(this.propertiesToInternalString(propOrig));
          Utility.getLogger().info("propNew:     " + propNew);
      	return this.setProperties(propNew);
      }