diff --git a/aegisub/src/ass_attachment.h b/aegisub/src/ass_attachment.h
index 2f428b4b128de25784c7e841c83846bddd6f056c..093af65bd9a121e9e0224c48301a5d078daa320d 100644
--- a/aegisub/src/ass_attachment.h
+++ b/aegisub/src/ass_attachment.h
@@ -22,7 +22,7 @@
 #include <vector>
 
 /// @class AssAttachment
-class AssAttachment : public AssEntry {
+class AssAttachment : public AssEntry, public AssEntryListHook {
 	/// ASS uuencoded entry data, including header.
 	boost::flyweight<std::string> entry_data;
 
diff --git a/aegisub/src/ass_dialogue.h b/aegisub/src/ass_dialogue.h
index 9d661ba84ad884835d3e49db6ccc8e5a716284a2..2c590c71afedc4004aa10ed68ad3e6d64f70bd7c 100644
--- a/aegisub/src/ass_dialogue.h
+++ b/aegisub/src/ass_dialogue.h
@@ -150,7 +150,7 @@ struct AssDialogueBase {
 	boost::flyweight<std::string> Text;
 };
 
-class AssDialogue : public AssEntry, public AssDialogueBase {
+class AssDialogue : public AssEntry, public AssDialogueBase, public AssEntryListHook {
 	std::string GetData(bool ssa) const;
 
 	/// @brief Parse raw ASS data into everything else
diff --git a/aegisub/src/ass_entry.h b/aegisub/src/ass_entry.h
index cfeb2dafb2d2cd437097727e38900f44275b01bc..5ab2df01212880c5f187a9bdf61f1784b32922bf 100644
--- a/aegisub/src/ass_entry.h
+++ b/aegisub/src/ass_entry.h
@@ -46,7 +46,9 @@ enum class AssEntryGroup {
 	GROUP_MAX
 };
 
-class AssEntry : public boost::intrusive::make_list_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>::type {
+using AssEntryListHook = boost::intrusive::make_list_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>::type;
+
+class AssEntry {
 public:
 	virtual ~AssEntry() { }
 
diff --git a/aegisub/src/ass_file.h b/aegisub/src/ass_file.h
index b040fcbc437195835b2db618ab7820420353e163..d7a748e25c60acc2e3cd136fa2e23f8d13367b1a 100644
--- a/aegisub/src/ass_file.h
+++ b/aegisub/src/ass_file.h
@@ -48,7 +48,7 @@ class AssStyle;
 class wxString;
 
 template<typename T>
-using EntryList = typename boost::intrusive::make_list<T, boost::intrusive::constant_time_size<false>, boost::intrusive::base_hook<AssEntry>>::type;
+using EntryList = typename boost::intrusive::make_list<T, boost::intrusive::constant_time_size<false>, boost::intrusive::base_hook<AssEntryListHook>>::type;
 
 struct AssFileCommit {
 	wxString const& message;
diff --git a/aegisub/src/ass_style.h b/aegisub/src/ass_style.h
index 935329ebeaf0f22773b3ac4a6691e2583b8e002c..14dac5d000fb648c70d85bb111f142f93ecb5a52 100644
--- a/aegisub/src/ass_style.h
+++ b/aegisub/src/ass_style.h
@@ -39,7 +39,7 @@
 #include <array>
 #include <wx/arrstr.h>
 
-class AssStyle : public AssEntry {
+class AssStyle : public AssEntry, public AssEntryListHook {
 	std::string data;
 
 public: