diff --git a/LEGO1/lego/legoomni/include/legomodelpresenter.h b/LEGO1/lego/legoomni/include/legomodelpresenter.h
index db9fc20d..cd5e1018 100644
--- a/LEGO1/lego/legoomni/include/legomodelpresenter.h
+++ b/LEGO1/lego/legoomni/include/legomodelpresenter.h
@@ -9,6 +9,9 @@ class AutoROI;
 // SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
 class LegoModelPresenter : public MxVideoPresenter {
 public:
+	// inline in scalar dtor
+	~LegoModelPresenter() override { Destroy(TRUE); }
+
 	static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig);
 
 	// FUNCTION: LEGO1 0x1000ccb0
diff --git a/LEGO1/lego/legoomni/include/legoobjectfactory.h b/LEGO1/lego/legoomni/include/legoobjectfactory.h
index ca2bc8d5..a99efec2 100644
--- a/LEGO1/lego/legoomni/include/legoobjectfactory.h
+++ b/LEGO1/lego/legoomni/include/legoobjectfactory.h
@@ -111,6 +111,9 @@ public:
 	// SYNTHETIC: LEGO1 0x10009000
 	// LegoObjectFactory::`scalar deleting destructor'
 
+	// SYNTHETIC: LEGO1 0x10009170
+	// LegoObjectFactory::~LegoObjectFactory
+
 private:
 #define X(V) MxAtomId m_id##V;
 	FOR_LEGOOBJECTFACTORY_OBJECTS(X)
diff --git a/LEGO1/lego/legoomni/include/legopartpresenter.h b/LEGO1/lego/legoomni/include/legopartpresenter.h
index ab27b0e9..2ff6faa1 100644
--- a/LEGO1/lego/legoomni/include/legopartpresenter.h
+++ b/LEGO1/lego/legoomni/include/legopartpresenter.h
@@ -7,6 +7,8 @@
 // SIZE 0x54 (from inlined construction at 0x10009fac)
 class LegoPartPresenter : public MxMediaPresenter {
 public:
+	~LegoPartPresenter() override { Destroy(TRUE); }
+
 	// FUNCTION: LEGO1 0x1000cf70
 	inline const char* ClassName() const override // vtable+0x0c
 	{
@@ -28,6 +30,9 @@ public:
 
 	// SYNTHETIC: LEGO1 0x1000d060
 	// LegoPartPresenter::`scalar deleting destructor'
+
+private:
+	void Destroy(MxBool p_fromDestructor);
 };
 
 #endif // LEGOPARTPRESENTER_H
diff --git a/LEGO1/lego/legoomni/include/racestate.h b/LEGO1/lego/legoomni/include/racestate.h
index 987d3a69..b8daa738 100644
--- a/LEGO1/lego/legoomni/include/racestate.h
+++ b/LEGO1/lego/legoomni/include/racestate.h
@@ -34,6 +34,9 @@ public:
 
 	inline MxU16 GetColor(MxU8 p_id) { return GetState(p_id)->m_color; }
 
+	// SYNTHETIC: LEGO1 0x1000f6f0
+	// RaceState::~RaceState
+
 	// SYNTHETIC: LEGO1 0x100160d0
 	// RaceState::`scalar deleting destructor'
 
diff --git a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
index d74640d7..08cfe878 100644
--- a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
+++ b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
@@ -9,10 +9,10 @@ int g_partPresenterConfig1 = 1;
 // GLOBAL: LEGO1 0x100f7aa4
 int g_partPresenterConfig2 = 100;
 
-// STUB: LEGO1 0x1000cf60
+// FUNCTION: LEGO1 0x1000cf60
 void LegoPartPresenter::Destroy()
 {
-	// TODO
+	Destroy(FALSE);
 }
 
 // FUNCTION: LEGO1 0x1007c990
@@ -29,6 +29,12 @@ MxResult LegoPartPresenter::AddToManager()
 	return SUCCESS;
 }
 
+// STUB: LEGO1 0x1007c9d0
+void LegoPartPresenter::Destroy(MxBool p_fromDestructor)
+{
+	// TODO
+}
+
 // STUB: LEGO1 0x1007deb0
 void LegoPartPresenter::ReadyTickle()
 {
diff --git a/LEGO1/omni/include/mxthread.h b/LEGO1/omni/include/mxthread.h
index 93b14fb1..6016aa8f 100644
--- a/LEGO1/omni/include/mxthread.h
+++ b/LEGO1/omni/include/mxthread.h
@@ -47,7 +47,6 @@ protected:
 class MxTickleThread : public MxThread {
 public:
 	MxTickleThread(MxCore* p_target, MxS32 p_frequencyMS);
-	~MxTickleThread() override {}
 
 	MxResult Run() override;
 
diff --git a/LEGO1/tgl/tgl.h b/LEGO1/tgl/tgl.h
index d03eecbc..1067f863 100644
--- a/LEGO1/tgl/tgl.h
+++ b/LEGO1/tgl/tgl.h
@@ -101,6 +101,7 @@ class Unk;
 // VTABLE: LEGO1 0x100db980
 class Object {
 public:
+	// FUNCTION: LEGO1 0x100a2240
 	virtual ~Object() {}
 
 	virtual void* ImplementationDataPtr() = 0;
@@ -146,6 +147,9 @@ public:
 	// vtable+0x30
 	virtual Result SetTextureDefaultColorCount(unsigned long) = 0;
 
+	// SYNTHETIC: LEGO1 0x100a1770
+	// Tgl::Renderer::~Renderer
+
 	// SYNTHETIC: LEGO1 0x100a17c0
 	// Tgl::Renderer::`scalar deleting destructor'
 };
@@ -170,6 +174,9 @@ public:
 	virtual void InitFromD3DDevice(Device*) = 0;
 	virtual void InitFromWindowsDevice(Device*) = 0;
 
+	// SYNTHETIC: LEGO1 0x100a2350
+	// Tgl::Device::~Device
+
 	// SYNTHETIC: LEGO1 0x100a28e0
 	// Tgl::Device::`scalar deleting destructor'
 };
@@ -227,6 +234,9 @@ public:
 		int& rPickedGroupCount
 	) = 0;
 
+	// SYNTHETIC: LEGO1 0x100a2430
+	// Tgl::View::~View
+
 	// SYNTHETIC: LEGO1 0x100a2950
 	// Tgl::View::`scalar deleting destructor'
 };
@@ -236,6 +246,9 @@ class Camera : public Object {
 public:
 	virtual Result SetTransformation(FloatMatrix4&) = 0;
 
+	// SYNTHETIC: LEGO1 0x100a25f0
+	// Tgl::Camera::~Camera
+
 	// SYNTHETIC: LEGO1 0x100a2a30
 	// Tgl::Camera::`scalar deleting destructor'
 };
@@ -246,6 +259,9 @@ public:
 	virtual Result SetTransformation(FloatMatrix4&) = 0;
 	virtual Result SetColor(float r, float g, float b) = 0;
 
+	// SYNTHETIC: LEGO1 0x100a26d0
+	// Tgl::Light::~Light
+
 	// SYNTHETIC: LEGO1 0x100a2aa0
 	// Tgl::Light::`scalar deleting destructor'
 };
@@ -288,6 +304,9 @@ public:
 	// to have been replaced by something else in the shipped code.
 	virtual Result Unknown() = 0;
 
+	// SYNTHETIC: LEGO1 0x100a2510
+	// Tgl::Group::~Group
+
 	// SYNTHETIC: LEGO1 0x100a29c0
 	// Tgl::Group::`scalar deleting destructor'
 };
@@ -310,6 +329,9 @@ public:
 	virtual Result GetBoundingBox(float min[3], float max[3]) = 0;
 	virtual Unk* Clone() = 0;
 
+	// SYNTHETIC: LEGO1 0x100a27b0
+	// Tgl::Unk::~Unk
+
 	// SYNTHETIC: LEGO1 0x100a2b10
 	// Tgl::Unk::`scalar deleting destructor'
 };
@@ -333,6 +355,9 @@ public:
 	) = 0;
 	virtual Result SetPalette(int entryCount, PaletteEntry* pEntries) = 0;
 
+	// SYNTHETIC: LEGO1 0x100a2890
+	// Tgl::Texture::~Texture
+
 	// SYNTHETIC: LEGO1 0x100a2b80
 	// Tgl::Texture::`scalar deleting destructor'
 };