Buggy code:
public class DataproviderTypeSabloValue implements IDataLinkedPropertyValue , IFindModeAwarePropertyValue { protected final String dataProviderID ; protected final DataAdapterList dataAdapterList ; protected final IServoyDataConverterContext servoyDataConverterContext ; private final FormElement formElement ; protected Object value ; protected Object jsonValue ; protected IChangeListener changeMonitor ; protected PropertyDescription typeOfDP ; protected ComponentFormat fieldFormat ; protected boolean findMode = false ; protected final PropertyDescription dpPD ; private TargetDataLinks dataLinks ; private Set < String > tagsDataProviders ; private boolean displaysTags ; private IFoundSetEventListener globalRelatedFoundsetListener ; private IFoundSetInternal globalRelatedFoundset ; private String globalRelationName ; private ListSelectionListener relatedFoundsetSelectionListener ; private IFoundSetInternal relatedFoundset ; private String relationName ; public DataproviderTypeSabloValue ( String dataProviderID , DataAdapterList dataAdapterList , WebFormComponent component , PropertyDescription dpPD ) { } protected DataproviderConfig getDataProviderConfig ( ) { } public String getDataProviderID ( ) { } public Object getValue ( ) { } @ Override public void attachToBaseObject ( IChangeListener changeNotifier , BaseWebObject component ) { } @ Override public void detach ( ) { } @ Override public void findModeChanged ( boolean newFindMode ) { } @ Override public void dataProviderOrRecordChanged ( final IRecordInternal record , final String dataProvider , final boolean isFormDP , final boolean isGlobalDP , boolean fireChangeEvent ) { IDataProviderLookup dpLookup = new com . servoy . j2db . FormAndTableDataProviderLookup ( servoyDataConverterContext . getApplication ( ) . getFlattenedSolution ( ) , servoyDataConverterContext . getForm ( ) . getForm ( ) , ( record != null ? record . getParentFoundSet ( ) . getTable ( ) : null ) ) ; Collection < PropertyDescription > properties = formElement . getWebComponentSpec ( ) . getProperties ( TypesRegistry . getType ( "format" ) ) ; for ( PropertyDescription formatPd : properties ) { Object formatConfig = formatPd . getConfig ( ) ; if ( ( formatConfig instanceof String [ ] ) && ( ( Arrays . asList ( ( ( String [ ] ) ( formatConfig ) ) ) . indexOf ( dpPD . getName ( ) ) ) != ( - 1 ) ) ) { INGApplication application = servoyDataConverterContext . getApplication ( ) ; String format = ( ( String ) ( formElement . getPropertyValue ( formatPd . getName ( ) ) ) ) ; if ( format != null ) { fieldFormat = ComponentFormat . getComponentFormat ( format , dataProviderID , dpLookup , application ) ; break ; } } } if ( ( fieldFormat ) != null ) { typeOfDP = NGUtils . getDataProviderPropertyDescription ( fieldFormat . uiType , getDataProviderConfig ( ) . hasParseHtml ( ) ) ; } else { typeOfDP = NGUtils . getDataProviderPropertyDescription ( dataProviderID , servoyDataConverterContext . getApplication ( ) . getFlattenedSolution ( ) , servoyDataConverterContext . getForm ( ) . getForm ( ) , ( record != null ? record . getParentFoundSet ( ) . getTable ( ) : null ) , getDataProviderConfig ( ) . hasParseHtml ( ) ) ; } if ( ( globalRelationName ) != null ) { try { IFoundSetInternal newRelatedFoundset = servoyDataConverterContext . getApplication ( ) . getFoundSetManager ( ) . getGlobalRelatedFoundSet ( globalRelationName ) ; if ( newRelatedFoundset != ( globalRelatedFoundset ) ) { if ( ( globalRelatedFoundset ) != null ) { globalRelatedFoundset . removeFoundSetEventListener ( globalRelatedFoundsetListener ) ; } globalRelatedFoundset = newRelatedFoundset ; globalRelatedFoundset . addFoundSetEventListener ( globalRelatedFoundsetListener ) ; } } catch ( Exception ex ) { Debug . error ( ex ) ; } } if ( ( relatedFoundsetSelectionListener ) != null ) { try { <START_BUG> IFoundSetInternal newRelatedFoundset = record . getRelatedFoundSet ( relationName ) ; <END_BUG> if ( newRelatedFoundset != ( relatedFoundset ) ) { if ( ( relatedFoundset ) != null ) { ( ( com . servoy . j2db . dataprocessing . ISwingFoundSet ) ( relatedFoundset ) ) . getSelectionModel ( ) . removeListSelectionListener ( relatedFoundsetSelectionListener ) ; } relatedFoundset = newRelatedFoundset ; ( ( com . servoy . j2db . dataprocessing . ISwingFoundSet ) ( relatedFoundset ) ) . getSelectionModel ( ) . addListSelectionListener ( relatedFoundsetSelectionListener ) ; } } catch ( Exception ex ) { Debug . error ( ex ) ; } } String dpID = dataProviderID ; if ( dpLookup != null ) { IDataProvider dp ; try { dp = dpLookup . getDataProvider ( dataProviderID ) ; if ( dp != null ) { dpID = dp . getDataProviderID ( ) ; } } catch ( RepositoryException e ) { Debug . error ( e ) ; } } Object v = com . servoy . j2db . dataprocessing . DataAdapterList . getValueObject ( record , servoyDataConverterContext . getForm ( ) . getFormScope ( ) , dpID ) ; if ( v == ( Scriptable . NOT_FOUND ) ) v = null ; if ( ( ( fieldFormat ) != null ) && ( ! ( findMode ) ) ) { v = ComponentFormat . applyUIConverterToObject ( v , dataProviderID , servoyDataConverterContext . getApplication ( ) . getFoundSetManager ( ) , fieldFormat ) ; } v = replaceTagsIfNeeded ( v ) ; if ( v instanceof UUID ) v = v . toString ( ) ; boolean changed = ( v != ( value ) ) && ( ( v == null ) || ( ! ( v . equals ( value ) ) ) ) ; value = v ; if ( changed ) { jsonValue = null ; } if ( fireChangeEvent && changed ) { changeMonitor . valueChanged ( ) ; } } private Object replaceTagsIfNeeded ( Object v ) { } public void toJSON ( JSONWriter writer , String key , DataConversion clientConversion , IBrowserConverterContext dataConverterContext ) throws JSONException { } public void browserUpdateReceived ( Object newJSONValue , IBrowserConverterContext dataConverterContext ) { } }

Fix:
IFoundSetInternal newRelatedFoundset = ( record != null ) ? record . getRelatedFoundSet ( relationName ) : null ;