implemented special cases