private void connectAt( int x, int y, boolean constructing ){
		ConnectionableCapability nextTargetItem = getTargetCapability( x, y );
		ConnectionArray nextTargetArray = null;
		if( nextTargetItem != null ){
			ConnectionFlavor flavor = factory.getFlavor();
			nextTargetArray = nextTargetItem.getTargetArray( x, y, flavor, constructing );
		}
		if( nextTargetArray != targetArray ){
			if( targetArray != null ){
				targetArray.remove( connection.getTargetEndPoint() );
			}
			if( nextTargetArray != null ){
				openEnded.handleNotOpenEnded( x, y );
				nextTargetArray.add( connection.getTargetEndPoint() );
			}
			
			if( targetArray == null && nextTargetArray != null ){
				sourceArray.add( connection.getSourceEndPoint() );
				site.addItem( connection );
			}
			if( targetArray != null && nextTargetArray == null ){
				sourceArray.remove( connection.getSourceEndPoint() );
				site.removeItem( connection );
			}
		}
		if( nextTargetArray == null ){
			openEnded.handleOpenEndedAt( x, y );
		}
		
		targetItem = nextTargetItem;
		targetArray = nextTargetArray;		
	}