add whole logic