diff --git a/CelestialObject.c b/CelestialObject.c
index 1a5b389f93050ee0c61cea2d870fafbf08d2c113..b3362edc68598a6fcf3a8eebf67de347c408e328 100644
--- a/CelestialObject.c
+++ b/CelestialObject.c
@@ -5,12 +5,14 @@
 #define G 6.67e-11
 #define SUN_MASS 1.989e30
 
-CelestialObject *celestial_object_create(double mass, Vector2 position) {
+CelestialObject *celestial_object_create(double mass, double semi_major_half, double orbital_eccentricity) {
     CelestialObject *object = (CelestialObject*)malloc(sizeof(CelestialObject));
 
     object->mass = mass;
     object->previous_position = vector2_create_zero();
-    object->current_position = position;
+
+    double perihelion = semi_major_half * (1 - orbital_eccentricity);
+    object->current_position = vector2_create(-perihelion, 0);
 
     return object;
 }
diff --git a/CelestialObject.h b/CelestialObject.h
index aaf020a7d50c85eb8f9ee1e4a7762eef6ce3b828..468b2b8a068d408df290239a33bc884576d14de9 100644
--- a/CelestialObject.h
+++ b/CelestialObject.h
@@ -11,6 +11,6 @@ typedef struct CelestialObject {
     Vector2 current_position;
 } CelestialObject;
 
-CelestialObject *celestial_object_create(double mass, Vector2 position);
+CelestialObject *celestial_object_create(double mass, double semi_major_half, double orbital_eccentricity);
 
 #endif
diff --git a/SolarSystem.c b/SolarSystem.c
index 62f3084f53162d82ab5e6002b59fda1bf920d105..6415ea0b6e3456bfcabaf9155b9b81b67b6465ed 100644
--- a/SolarSystem.c
+++ b/SolarSystem.c
@@ -8,22 +8,50 @@
 
 #define SCREEN_WIDTH 1000
 #define SCREEN_HEIGHT 1000
+
+const int SUN_INDEX = 0;
+const int MERCURE_INDEX = 1;
+const int VENUS_INDEX = 2;
+const int EARTH_INDEX = 3;
+const int MARS_INDEX = 4;
+
 const double G = 6.67430 * 1E-11;
 
+// Eccentricties found at : https://fr.wikipedia.org/wiki/Excentricit%C3%A9_orbitale
+const double MERCURE_ECCENTRICITY = 0.20563069;
+const double VENUS_ECCENTRICITY = 0.00677323;
+const double EARTH_ECCENTRICITY = 0.01671022;
+const double MARS_ECCENTRICITY = 0.09341233;
+
+// CelestialObjects Masses found at : https://promenade.imcce.fr/fr/pages5/557.html
+const double SUN_MASS = 1.9889 * 1E30;
+const double MERCURE_MASS = 0.33018 * 1E24;
+const double VENUS_MASS = 4.8685 * 1E24;
+const double EARTH_MASS = 5.9736 * 1E24;
+const double MARS_MASS = 0.64185 * 1E24;
+
+// CelestialObjects Semi-major axis found at : https://www.le-systeme-solaire.net/demi-grand-axe.html
+const double MERCURE_SEMI_MAJOR_AXIS = 579.1 * 1E8;
+const double VENUS_SEMI_MAJOR_AXIS = 108.2 * 1E9;
+const double EARTH_SEMI_MAJOR_AXIS = 149.6 * 1E9;
+const double MARS_SEMI_MAJOR_AXIS = 227.9 * 1E9;
+
 SolarSystem *solar_system_create(double interval) {
     SolarSystem *solar_system = (SolarSystem *)malloc(sizeof(SolarSystem));
 
-    solar_system->objects_length = 3;
+    solar_system->objects_length = 5;
     solar_system->objects = (CelestialObject **)malloc(sizeof(SolarSystem *) * solar_system->objects_length);
     solar_system->interval = interval;
 
-    solar_system->objects[0] = celestial_object_create(1.989 * 1E30, vector2_create(0, 0));
+    solar_system->objects[SUN_INDEX] = celestial_object_create(SUN_MASS, 0, 0);
+
+    solar_system->objects[MERCURE_INDEX] = celestial_object_create(MERCURE_MASS, MERCURE_SEMI_MAJOR_AXIS, MERCURE_ECCENTRICITY);
+
+    solar_system->objects[VENUS_INDEX] = celestial_object_create(VENUS_MASS, VENUS_SEMI_MAJOR_AXIS, VENUS_ECCENTRICITY);
 
-    double perihelion_1 = 149.6 * 1E9 * (1 - 0.01671123);
-    solar_system->objects[1] = celestial_object_create(5.972 * 1E24, vector2_create(-perihelion_1, 0));
+    solar_system->objects[EARTH_INDEX] = celestial_object_create(EARTH_MASS, EARTH_SEMI_MAJOR_AXIS, EARTH_ECCENTRICITY);
 
-    double perihelion_2 = 227.9 * 1E9 * (1 - 0.09341233);
-    solar_system->objects[2] = celestial_object_create(6.39 * 1E23, vector2_create(-perihelion_2, 0));
+    solar_system->objects[MARS_INDEX] = celestial_object_create(MARS_MASS, MARS_SEMI_MAJOR_AXIS, MARS_ECCENTRICITY);
 
     return solar_system;
 }
@@ -53,13 +81,18 @@ void solar_system_update(SolarSystem *solar_system) {
         if (vector2_is_zero(solar_system->objects[i]->previous_position)) {
             // https://i.ytimg.com/vi/hbEbD1Z_tNQ/maxresdefault.jpg
 
-            CelestialObject *star = solar_system->objects[0];
+            CelestialObject *star = solar_system->objects[SUN_INDEX];
             double perihelion_speed = 0;
 
-            if (i == 1) {
-                perihelion_speed = sqrt((G * star->mass * (1 + 0.01671123)) / (149.6 * 1E9 * (1 - 0.01671123)));
-            } else if (i == 2) {
-                perihelion_speed = sqrt((G * star->mass * (1 + 0.09341233)) / (227.9 * 1E9 * (1 - 0.09341233)));
+            if (i == MERCURE_INDEX) {
+                perihelion_speed = sqrt((G * star->mass * (1 + MERCURE_ECCENTRICITY)) / (MERCURE_SEMI_MAJOR_AXIS * (1 - MERCURE_ECCENTRICITY)));
+
+            } else if (i == VENUS_INDEX) {
+                perihelion_speed = sqrt((G * star->mass * (1 + VENUS_ECCENTRICITY)) / (VENUS_SEMI_MAJOR_AXIS * (1 - VENUS_ECCENTRICITY)));
+            } else if (i == EARTH_INDEX) {
+                perihelion_speed = sqrt((G * star->mass * (1 + EARTH_ECCENTRICITY)) / (EARTH_SEMI_MAJOR_AXIS * (1 - EARTH_ECCENTRICITY)));
+            } else if (i == MARS_INDEX) {
+                perihelion_speed = sqrt((G * star->mass * (1 + MARS_ECCENTRICITY)) / (MARS_SEMI_MAJOR_AXIS * (1 - MARS_ECCENTRICITY)));
             }
 
             Vector2 tmp = object->current_position;
@@ -89,16 +122,24 @@ void solar_system_draw(SolarSystem *solar_system, struct gfx_context_t *context)
         Vector2 scaled_position = vector2_multiply(object->current_position, 1.0 / (300 * 1E9));
         scaled_position = vector2_fit_canvas(scaled_position, SCREEN_WIDTH, SCREEN_HEIGHT);
 
-        if (i == 0) {
+        if (i == SUN_INDEX) {
             draw_full_circle(context, scaled_position.x, scaled_position.y, 50, COLOR_YELLOW);
         }
 
-        if (i == 1) {
+        if (i == MERCURE_INDEX) {
+            draw_full_circle(context, scaled_position.x, scaled_position.y, 10, (COLOR_WHITE + COLOR_BLACK));
+        }
+
+        if (i == VENUS_INDEX) {
+            draw_full_circle(context, scaled_position.x, scaled_position.y, 20, (COLOR_RED + COLOR_YELLOW));
+        }
+
+        if (i == EARTH_INDEX) {
             draw_full_circle(context, scaled_position.x, scaled_position.y, 20, COLOR_BLUE);
         }
 
-        if (i == 2) {
-            draw_full_circle(context, scaled_position.x, scaled_position.y, 10, COLOR_RED);
+        if (i == MARS_INDEX) {
+            draw_full_circle(context, scaled_position.x, scaled_position.y, 12, COLOR_RED);
         }
     }
 }