diff --git a/dGame/dComponents/LUPExhibitComponent.cpp b/dGame/dComponents/LUPExhibitComponent.cpp
index 151f28977..a312617d3 100644
--- a/dGame/dComponents/LUPExhibitComponent.cpp
+++ b/dGame/dComponents/LUPExhibitComponent.cpp
@@ -1,44 +1,24 @@
 #include "LUPExhibitComponent.h"
-
 #include "EntityManager.h"
 
-LUPExhibitComponent::LUPExhibitComponent(Entity* parent) : Component(parent) {
-	m_Exhibits = { 11121, 11295, 11423, 11979 };
-
-	m_ExhibitIndex = 0;
-
-	m_Exhibit = m_Exhibits[m_ExhibitIndex];
-
-
-}
-
-LUPExhibitComponent::~LUPExhibitComponent() {
-
-}
-
 void LUPExhibitComponent::Update(float deltaTime) {
 	m_UpdateTimer += deltaTime;
-
 	if (m_UpdateTimer > 20.0f) {
-		NextExhibit();
-
+		NextLUPExhibit();
 		m_UpdateTimer = 0.0f;
 	}
 }
 
-void LUPExhibitComponent::NextExhibit() {
-	m_ExhibitIndex++;
-
-	if (m_ExhibitIndex >= m_Exhibits.size()) {
-		m_ExhibitIndex = 0;
-	}
-
-	m_Exhibit = m_Exhibits[m_ExhibitIndex];
-
+void LUPExhibitComponent::NextLUPExhibit() {
+	m_LUPExhibitIndex++;
+	m_DirtyLUPExhibit = true;
 	Game::entityManager->SerializeEntity(m_Parent);
 }
 
 void LUPExhibitComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) {
-	outBitStream->Write1(); // Dirty flag?
-	outBitStream->Write(m_Exhibit);
+	outBitStream->Write(m_DirtyLUPExhibit);
+	if (m_DirtyLUPExhibit) {
+		outBitStream->Write(m_LUPExhibits[m_LUPExhibitIndex % m_LUPExhibits.size()]);
+		if (!bIsInitialUpdate) m_DirtyLUPExhibit = false;
+	}
 }
diff --git a/dGame/dComponents/LUPExhibitComponent.h b/dGame/dComponents/LUPExhibitComponent.h
index 646d361c9..47b13a177 100644
--- a/dGame/dComponents/LUPExhibitComponent.h
+++ b/dGame/dComponents/LUPExhibitComponent.h
@@ -3,6 +3,9 @@
 #include "Component.h"
 #include "Entity.h"
 #include "eReplicaComponentType.h"
+#include <cstdint>
+#include <array>
+#include "dCommonVars.h"
 
 /**
  * Component that handles the LOT that is shown in the LUP exhibit in the LUP world. Works by setting a timer and
@@ -11,35 +14,15 @@
 class LUPExhibitComponent : public Component
 {
 public:
-	inline static const eReplicaComponentType ComponentType = eReplicaComponentType::EXHIBIT;
+	inline static const eReplicaComponentType ComponentType = eReplicaComponentType::LUP_EXHIBIT;
 
-	LUPExhibitComponent(Entity* parent);
-	~LUPExhibitComponent();
+	LUPExhibitComponent(Entity* parent) : Component(parent) {};
 	void Update(float deltaTime) override;
 	void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
-
-	/**
-	 * After the timer runs out, this changes the currently exhibited LOT to the next one
-	 */
-	void NextExhibit();
+	void NextLUPExhibit();
 private:
-	/**
-	 * The LOT that's currently on exhibit
-	 */
-	LOT m_Exhibit;
-
-	/**
-	 * The time since we've last updated the exhibit
-	 */
-	float m_UpdateTimer;
-
-	/**
-	 * The list of possible exhibits to show
-	 */
-	std::vector<LOT> m_Exhibits;
-
-	/**
-	 * The current index in the exhibit list
-	 */
-	size_t m_ExhibitIndex;
+	float m_UpdateTimer = 0.0f;
+	std::array<LOT, 4> m_LUPExhibits = { 11121, 11295, 11423, 11979 };
+	uint8_t m_LUPExhibitIndex = 0;
+	bool m_DirtyLUPExhibit = true;
 };