diff --git a/src/cluster.c b/src/cluster.c
index 939ae5ce1ab29fb8b7ea9a9a2b96cb9e60fa702e..f1b2c276129e5084a3c6026b9aa98b8036c27c53 100644
--- a/src/cluster.c
+++ b/src/cluster.c
@@ -33,51 +33,45 @@ void cluster_destroy_fpt(cluster_fpt_t* cluster) {
 
 
 void cluster_add_point_int(cluster_int_t* cluster, vector_int_t* point) {
-	//TODO
 	if (NULL == cluster || NULL == point) return;
 	list_points_append_int(cluster->points, point);
-	if (NULL == cluster->center) {
-		cluster->center = vector_copy_int(point);
-	} else {
-		vector_int_t* delta = vector_copy_int(point);
-		vector_div_inplace_int(delta, cluster->points->size);
-		vector_add_inplace_int(cluster->center, *delta);
-		vector_destroy_int(delta);
-	}
 }
 
 void cluster_add_point_fpt(cluster_fpt_t* cluster, vector_fpt_t* point) {
-	//TODO
 	if (NULL == cluster || NULL == point) return;
 	list_points_append_fpt(cluster->points, point);
-	if (NULL == cluster->center) {
-		cluster->center = vector_copy_fpt(point);
-	} else {
-		vector_fpt_t* delta = vector_copy_fpt(point);
-		vector_div_inplace_fpt(delta, cluster->points->size);
-		vector_add_inplace_fpt(cluster->center, *delta);
-		vector_destroy_fpt(delta);
-	}
 }
 
 
 void cluster_update_center_int(cluster_int_t* cluster) {
-	//TODO
+	vector_destroy_int(cluster->center);
+	cluster->center = vector_create_int(cluster->points->head->point->dim);
+	list_points_node_int_t* node = cluster->points->head;
+	while (node != NULL) {
+		vector_add_inplace_int(cluster->center, *(node->point));
+		node = node->next;
+	}
+	vector_div_inplace_int(cluster->center, (int_t) cluster->points->size);
 }
 
 void cluster_update_center_fpt(cluster_fpt_t* cluster) {
-	//TODO
+	vector_destroy_fpt(cluster->center);
+	cluster->center = vector_create_fpt(cluster->points->head->point->dim);
+	list_points_node_fpt_t* node = cluster->points->head;
+	while (node != NULL) {
+		vector_add_inplace_fpt(cluster->center, *(node->point));
+		node = node->next;
+	}
+	vector_div_inplace_fpt(cluster->center, (fpt_t) cluster->points->size);
 }
 
 
 void cluster_reset_int(cluster_int_t* cluster) {
-	//TODO
 	list_points_destroy_int(cluster->points, false);
 	cluster->points = list_points_create_int();
 }
 
 void cluster_reset_fpt(cluster_fpt_t* cluster) {
-	//TODO
 	list_points_destroy_fpt(cluster->points, false);
 	cluster->points = list_points_create_fpt();
 }