private void disconnectIndirections(IndirectionsMetaData metaData, String oneDN, List<String> theOtherDNs) {
    	if (StringUtils.isEmpty(oneDN) || CollectionUtils.isEmpty(theOtherDNs)) {
    		LogUtils.debug(LOG, "disconnectIndirections: either one or theOther is empty, do nothing.");
    		return;
    	}
    	
		LogUtils.debug(LOG, "disconnect " + oneDN + " and " + theOtherDNs);

		try {
			ctx.modifyAttributes(oneDN, new ModificationItem[] {
				ModUtils.remove(metaData.getOne().getIndirectionAttr(), theOtherDNs)
			});
			LogUtils.debug(LOG, String.format("disconnected: %s -> %s", oneDN, theOtherDNs));
			
			for (String theOtherDN : theOtherDNs) {
				String indirectionAttr = metaData.getTheOther().dnToIndirectionAttr(theOtherDN);
    			if (null == indirectionAttr) {
    				LogUtils.debug(LOG, "no corresponding indirection configured for " + theOtherDN);
    				continue;
    			}
				
				ctx.modifyAttributes(theOtherDN, new ModificationItem[] {
					ModUtils.remove(indirectionAttr, oneDN)
				});
				LogUtils.debug(LOG, String.format("disconnected: %s -> %s", theOtherDN, oneDN));
			}
		} catch (NamingException e) {
			throw new SessionException(e.getMessage(), e);
		}
    }