this does not require to be bidirectional