this thread is very long