diff --git a/src/Tracer.cpp b/src/Tracer.cpp
index e604f4a5b..bd5fcebc5 100644
--- a/src/Tracer.cpp
+++ b/src/Tracer.cpp
@@ -13,16 +13,29 @@
 
 
 
+const std::array<const Vector3f, 6>& cTracer::m_NormalTable(void)
+{
+	static std::array<const Vector3f, 6>* table =
+		new std::array<const Vector3f, 6>
+	{
+		{
+		Vector3f(-1,  0,  0),  // 1: -x
+		Vector3f( 0,  0, -1),  // 2: -z
+		Vector3f( 1,  0,  0),  // 3: +x
+		Vector3f( 0,  0,  1),  // 4: +z
+		Vector3f( 0,  1,  0),  // 5: +y
+		Vector3f( 0, -1,  0)   // 6: -y
+		}
+	};
+
+	return *table;
+};
+
+
 
 cTracer::cTracer(cWorld * a_World):
 	m_World(a_World)
 {
-	m_NormalTable[0].Set(-1,  0,  0);
-	m_NormalTable[1].Set( 0,  0, -1);
-	m_NormalTable[2].Set( 1,  0,  0);
-	m_NormalTable[3].Set( 0,  0,  1);
-	m_NormalTable[4].Set( 0,  1,  0);
-	m_NormalTable[5].Set( 0, -1,  0);
 }
 
 
@@ -241,7 +254,7 @@ bool cTracer::Trace(const Vector3f & a_Start, const Vector3f & a_Direction, int
 			int Normal = GetHitNormal(a_Start, End, pos);
 			if (Normal > 0)
 			{
-				HitNormal = m_NormalTable[Normal-1];
+				HitNormal = m_NormalTable()[Normal - 1];
 			}
 			return true;
 		}
diff --git a/src/Tracer.h b/src/Tracer.h
index ec87d449e..cf54fa66c 100644
--- a/src/Tracer.h
+++ b/src/Tracer.h
@@ -3,6 +3,8 @@
 
 #include "Vector3.h"
 
+#include <array>
+
 
 
 
@@ -64,7 +66,7 @@ private:
 	float SigNum( float a_Num);
 	cWorld* m_World;
 
-	Vector3f m_NormalTable[6];
+	static const std::array<const Vector3f, 6> & m_NormalTable(void);
 
 	Vector3f dir;
 	Vector3f tDelta;