trait implementation