refactored and redeigned Component