It does not have to be graphical object. I took a glance of your code and could not see that you are freeing most objects like TFPObjectList instances. If you dont free these lists you create memory leaks both for theirselves and for their contents. Keep in mind, for every object you create you need to have destruction (by calling free) somewhere. Most probably in an overriden destructor (Destroy) in TLaserUpdateThread. Plus, notice that you need to free what GetJSON returns. It creates new JsonData and you're responsible to free it. Last note, thread destruction is more tricky if you want to wait them to finish and read their results but you need to free them too somehow.