// LISTS
if (fieldValue instanceof ORecordLazyList) {
iCloned._fieldValues.put(iEntry.getKey(), ((ORecordLazyList) fieldValue).copy(iCloned));
} else if (fieldValue instanceof ORecordTrackedList) {
final ORecordTrackedList newList = new ORecordTrackedList(iCloned);
newList.addAll((ORecordTrackedList) fieldValue);
iCloned._fieldValues.put(iEntry.getKey(), newList);
} else if (fieldValue instanceof OTrackedList<?>) {
final OTrackedList<Object> newList = new OTrackedList<Object>(iCloned);
newList.addAll((OTrackedList<Object>) fieldValue);
iCloned._fieldValues.put(iEntry.getKey(), newList);
} else if (fieldValue instanceof List<?>) {
iCloned._fieldValues.put(iEntry.getKey(), new ArrayList<Object>((List<Object>) fieldValue));
// SETS
} else if (fieldValue instanceof ORecordLazySet) {
iCloned._fieldValues.put(iEntry.getKey(), ((ORecordLazySet) fieldValue).copy(iCloned));
} else if (fieldValue instanceof ORecordTrackedSet) {
final ORecordTrackedSet newList = new ORecordTrackedSet(iCloned);
newList.addAll((ORecordTrackedSet) fieldValue);
iCloned._fieldValues.put(iEntry.getKey(), newList);
} else if (fieldValue instanceof OTrackedSet<?>) {
final OTrackedSet<Object> newList = new OTrackedSet<Object>(iCloned);
newList.addAll((OTrackedSet<Object>) fieldValue);
iCloned._fieldValues.put(iEntry.getKey(), newList);
} else if (fieldValue instanceof Set<?>) {
iCloned._fieldValues.put(iEntry.getKey(), new HashSet<Object>((Set<Object>) fieldValue));