general implementations; needs fixing.