diff --git a/planet/planet.c b/planet/planet.c
index 362ed761cc4b46f07fc53c16b6b6fbc9a3927252..7e0de59d7119363077a90462ff3c580237b1e119 100755
--- a/planet/planet.c
+++ b/planet/planet.c
@@ -26,8 +26,8 @@ typedef struct _system
 planet_t create_planet(double mass, vec2 pos) {
 	planet_t p;
 	p.mass = mass;
-	p.prec_pos = pos;
 	p.pos = pos;
+	p.prec_pos = pos;  // must be changed
 	return p;
 }
 
@@ -37,17 +37,48 @@ system_t create_system(double delta_t) {
 	system.star = create_planet(M_SOLEIL, vec2_create_zero());
 	system.nb_planets = 4;
 	system.planets = malloc(system.nb_planets * sizeof(planet_t));
-	double masses[system.nb_planets] = {M_MERCURE, M_VENUS, M_TERRE, M_MARS};
-	//TODO
-	vec2 positions[system.nb_planets] = {vec2_create(), vec2_create(), vec2_create(), vec2_create()};
+	if (NULL == system.planets) return NULL;
+	double masses[system.nb_planets] = {
+			M_MERCURE,
+			M_VENUS,
+			M_TERRE,
+			M_MARS};
+	vec2 positions[system.nb_planets] = {
+			vec2_create(PER_MERCURE, 0.0),
+			vec2_create(PER_VENUS, 0.0),
+			vec2_create(PER_TERRE, 0.0),
+			vec2_create(PER_MARS, 0.0)};
+	double eccentricities[system.nb_planets] = {
+			E_MERCURE,
+			E_VENUS,
+			E_TERRE,
+			E_MARS};
+	double axis_major[system.nb_planets] = {
+			A_MERCURE,
+			A_VENUS,
+			A_TERRE,
+			A_MARS};
+	for (uint32_t i = 0; i < system.nb_planets; ++i) {
+		system.planets[i].mass = masses[i];
+		system.planets[i].pos = positions[i];
+		double vel = G * system.star.mass * (1.0 + eccentricities[i]);
+		vel /= axis_major[i] * (1.0 - eccentricities[i]);
+		vel = sqrt(vel);
+		const vec2 ru = vec2_normalize(vec2_sub(system.planets[i].pos, system.star.pos));
+		const vec2 rp = vec2_create(-ru.y, ru.x);
+		const vec2 v = vec2_mul(vel, r);
+		system.planets[i].prec_pos = vec2_sub(system.planets[i].pos, vec2_mul(delta_t, v));
+	}
 	return system;
 }
 
 
-void show_system(struct gfx_context_t *ctxt, system_t *system);
+void show_system(struct gfx_context_t* ctxt, system_t* system) {
+	//TODO
+}
 
 
-void update_system(system_t *system, double delta_t) {
+void update_system(system_t* system, double delta_t) {
 	for (uint32_t i = 0; i < system->nb_planets; ++i) {
 		// apply the effects of the sun
 		vec2 a = vec2_mul((G * system->star.mass) / r_star_2, vec2_normalize(system->planets[i].pos));
@@ -71,4 +102,6 @@ void update_system(system_t *system, double delta_t) {
 }
 
 
-void free_system(system_t *system);
+void free_system(system_t* system) {
+	free(system->planets);
+}