diff --git a/include/reactphysics3d/collision/CollisionCallback.h b/include/reactphysics3d/collision/CollisionCallback.h
index cd435884..ee9114a2 100644
--- a/include/reactphysics3d/collision/CollisionCallback.h
+++ b/include/reactphysics3d/collision/CollisionCallback.h
@@ -239,10 +239,10 @@ class CollisionCallback {
                 Array<reactphysics3d::ContactPair>& mLostContactPairs;
 
                 /// Array of indices in the mContactPairs array that are contact events (not overlap/triggers)
-                Array<uint> mContactPairsIndices;
+                Array<uint64> mContactPairsIndices;
 
                 /// Array of indices in the mLostContactPairs array that are contact events (not overlap/triggers)
-                Array<uint> mLostContactPairsIndices;
+                Array<uint64> mLostContactPairsIndices;
 
                 /// Reference to the physics world
                 PhysicsWorld& mWorld;
@@ -278,7 +278,7 @@ class CollisionCallback {
                  * @param index Index of the contact pair to retrieve
                  * @return A contact pair object
                  */
-                ContactPair getContactPair(uint32 index) const;
+                ContactPair getContactPair(uint64 index) const;
 
                 // -------------------- Friendship -------------------- //
 
diff --git a/include/reactphysics3d/collision/OverlapCallback.h b/include/reactphysics3d/collision/OverlapCallback.h
index 57c0dd4a..7e048922 100644
--- a/include/reactphysics3d/collision/OverlapCallback.h
+++ b/include/reactphysics3d/collision/OverlapCallback.h
@@ -138,10 +138,10 @@ class OverlapCallback {
                 Array<ContactPair>& mLostContactPairs;
 
                 /// Array of indices of the mContactPairs array that are overlap/triggers events (not contact events)
-                Array<uint> mContactPairsIndices;
+                Array<uint64> mContactPairsIndices;
 
                 /// Array of indices of the mLostContactPairs array that are overlap/triggers events (not contact events)
-                Array<uint> mLostContactPairsIndices;
+                Array<uint64> mLostContactPairsIndices;
 
                 /// Reference to the physics world
                 PhysicsWorld& mWorld;
diff --git a/include/reactphysics3d/containers/Deque.h b/include/reactphysics3d/containers/Deque.h
index adb5430b..68c1bbf4 100644
--- a/include/reactphysics3d/containers/Deque.h
+++ b/include/reactphysics3d/containers/Deque.h
@@ -491,18 +491,14 @@ class Deque {
 
         /// Return a reference to the first item of the deque
         const T& getFront() const {
-            if (mSize > 0) {
-                return mChunks[mFirstChunkIndex][mFirstItemIndex];
-            }
-            assert(false);
+            assert(mSize > 0);
+            return mChunks[mFirstChunkIndex][mFirstItemIndex];
         }
 
         /// Return a reference to the last item of the deque
         const T& getBack() const {
-            if (mSize > 0) {
-                return mChunks[mLastChunkIndex][mLastItemIndex];
-            }
-            assert(false);
+            assert(mSize > 0);
+            return mChunks[mLastChunkIndex][mLastItemIndex];
         }
 
         /// Clear the elements of the deque
diff --git a/include/reactphysics3d/containers/Map.h b/include/reactphysics3d/containers/Map.h
index 9c1f04aa..570eefd4 100755
--- a/include/reactphysics3d/containers/Map.h
+++ b/include/reactphysics3d/containers/Map.h
@@ -276,7 +276,7 @@ class Map {
             uint64* newBuckets = static_cast<uint64*>(mAllocator.allocate(capacity * sizeof(uint64)));
 
             // Allocate memory for the entries
-            const uint64 nbAllocatedEntries = static_cast<uint64>(static_cast<float>(capacity) * DEFAULT_LOAD_FACTOR);
+            const uint64 nbAllocatedEntries = static_cast<uint64>(capacity * double(DEFAULT_LOAD_FACTOR));
             assert(nbAllocatedEntries > 0);
             Pair<K, V>* newEntries = static_cast<Pair<K, V>*>(mAllocator.allocate(nbAllocatedEntries * sizeof(Pair<K, V>)));
             uint64* newNextEntries = static_cast<uint64*>(mAllocator.allocate(nbAllocatedEntries * sizeof(uint64)));
diff --git a/include/reactphysics3d/containers/Set.h b/include/reactphysics3d/containers/Set.h
index ec2d5717..6a97fcab 100755
--- a/include/reactphysics3d/containers/Set.h
+++ b/include/reactphysics3d/containers/Set.h
@@ -275,7 +275,7 @@ class Set {
             uint64* newBuckets = static_cast<uint64*>(mAllocator.allocate(capacity * sizeof(uint64)));
 
             // Allocate memory for the entries
-            const uint64 nbAllocatedEntries = static_cast<uint64>(static_cast<float>(capacity) * DEFAULT_LOAD_FACTOR);
+            const uint64 nbAllocatedEntries = static_cast<uint64>(capacity * double(DEFAULT_LOAD_FACTOR));
             assert(nbAllocatedEntries > 0);
             V* newEntries = static_cast<V*>(mAllocator.allocate(nbAllocatedEntries * sizeof(V)));
             uint64* newNextEntries = static_cast<uint64*>(mAllocator.allocate(nbAllocatedEntries * sizeof(uint64)));
@@ -351,7 +351,7 @@ class Set {
         /// Returns true if the item has been inserted and false otherwise.
         bool add(const V& value) {
 
-            uint64 bucket;
+            uint64 bucket = INVALID_INDEX;
 
             // Compute the hash code of the value
             const size_t hashCode = Hash()(value);
@@ -397,6 +397,8 @@ class Set {
 
             mNbEntries++;
 
+            assert(bucket != INVALID_INDEX);
+
             mNextEntries[entryIndex] = mBuckets[bucket];
             new (mEntries + entryIndex) V(value);
             mBuckets[bucket] = entryIndex;
diff --git a/include/reactphysics3d/engine/OverlappingPairs.h b/include/reactphysics3d/engine/OverlappingPairs.h
index 65c9fb86..c138c563 100644
--- a/include/reactphysics3d/engine/OverlappingPairs.h
+++ b/include/reactphysics3d/engine/OverlappingPairs.h
@@ -84,15 +84,11 @@ struct LastFrameCollisionInfo {
     uint8 satMinEdge2Index;
 
     /// Constructor
-    LastFrameCollisionInfo() {
+    LastFrameCollisionInfo()
+        :isValid(false), isObsolete(false), wasColliding(false), wasUsingGJK(false), gjkSeparatingAxis(Vector3(0, 1, 0)),
+         satIsAxisFacePolyhedron1(false), satIsAxisFacePolyhedron2(false), satMinAxisFaceIndex(0),
+         satMinEdge1Index(0), satMinEdge2Index(0) {
 
-        isValid = false;
-        isObsolete = false;
-        wasColliding = false;
-        wasUsingSAT = false;
-        wasUsingGJK = false;
-
-        gjkSeparatingAxis = Vector3(0, 1, 0);
     }
 };
 
diff --git a/include/reactphysics3d/mathematics/mathematics_functions.h b/include/reactphysics3d/mathematics/mathematics_functions.h
index 82f974b2..e6f5982b 100755
--- a/include/reactphysics3d/mathematics/mathematics_functions.h
+++ b/include/reactphysics3d/mathematics/mathematics_functions.h
@@ -427,7 +427,9 @@ RP3D_FORCE_INLINE uint64 nextPowerOfTwo64Bits(uint64 number) {
 /// http://szudzik.com/ElegantPairing.pdf
 RP3D_FORCE_INLINE uint64 pairNumbers(uint32 number1, uint32 number2) {
     assert(number1 == std::max(number1, number2));
-    return number1 * number1 + number1 + number2;
+    uint64 nb1 = number1;
+    uint64 nb2 = number2;
+    return nb1 * nb1 + nb1 + nb2;
 }
 
 
diff --git a/include/reactphysics3d/systems/ConstraintSolverSystem.h b/include/reactphysics3d/systems/ConstraintSolverSystem.h
index 626dbe47..09052459 100644
--- a/include/reactphysics3d/systems/ConstraintSolverSystem.h
+++ b/include/reactphysics3d/systems/ConstraintSolverSystem.h
@@ -68,7 +68,7 @@ struct ConstraintSolverData {
 
         /// Constructor
         ConstraintSolverData(RigidBodyComponents& rigidBodyComponents, JointComponents& jointComponents)
-                   :rigidBodyComponents(rigidBodyComponents), jointComponents(jointComponents) {
+                   :timeStep(0), isWarmStartingActive(true), rigidBodyComponents(rigidBodyComponents), jointComponents(jointComponents) {
 
         }
 
diff --git a/src/collision/CollisionCallback.cpp b/src/collision/CollisionCallback.cpp
index 92add3f0..0c6d9de3 100644
--- a/src/collision/CollisionCallback.cpp
+++ b/src/collision/CollisionCallback.cpp
@@ -117,7 +117,7 @@ CollisionCallback::ContactPoint CollisionCallback::ContactPair::getContactPoint(
 /// Note that the returned ContactPair object is only valid during the call of the CollisionCallback::onContact()
 /// method. Therefore, you need to get contact data from it and make a copy. Do not make a copy of the ContactPair
 /// object itself because it won't be valid after the CollisionCallback::onContact() call.
-CollisionCallback::ContactPair CollisionCallback::CallbackData::getContactPair(uint32 index) const {
+CollisionCallback::ContactPair CollisionCallback::CallbackData::getContactPair(uint64 index) const {
 
     assert(index < getNbContactPairs());
 
diff --git a/src/collision/OverlapCallback.cpp b/src/collision/OverlapCallback.cpp
index 08754033..e62add0e 100644
--- a/src/collision/OverlapCallback.cpp
+++ b/src/collision/OverlapCallback.cpp
@@ -82,7 +82,7 @@ OverlapCallback::CallbackData::CallbackData(Array<ContactPair>& contactPairs, Ar
     }
     // Filter the lost contact pairs to only keep the overlap/trigger events (not the contact events)
     const uint64 nbLostContactPairs = mLostContactPairs.size();
-    for (uint i=0; i < nbLostContactPairs; i++) {
+    for (uint64 i=0; i < nbLostContactPairs; i++) {
 
         // If the contact pair contains contacts (and is therefore not an overlap/trigger event)
         if (!onlyReportTriggers || mLostContactPairs[i].isTrigger) {
diff --git a/src/utils/DebugRenderer.cpp b/src/utils/DebugRenderer.cpp
index 6c3b77e9..217cc9cf 100644
--- a/src/utils/DebugRenderer.cpp
+++ b/src/utils/DebugRenderer.cpp
@@ -281,7 +281,7 @@ void DebugRenderer::drawConvexMesh(const Transform& transform, const ConvexMeshS
 		assert(face.faceVertices.size() >= 3);
 
 		// Perform a fan triangulation of the convex polygon face
-        const uint32 nbFaceVertices = face.faceVertices.size();
+        const uint32 nbFaceVertices = static_cast<uint32>(face.faceVertices.size());
         for (uint32 v = 2; v < nbFaceVertices; v++) {
 
             uint32 v1Index = face.faceVertices[v - 2];