add hash implementation