trait implementation + test