required functionality all working