custom component completed