diff --git a/header/vectors.h b/header/vectors.h
index 44ddb85e31ffd353c2273ee688837af82cde0ada..8c3dfca86a783d4995bea46f38b93eb249ccfe8a 100644
--- a/header/vectors.h
+++ b/header/vectors.h
@@ -30,6 +30,6 @@ void vector_insert(vector vec, type element, int index);
 void vector_empty(vector vec);
 void vector_free(vector vec);
 void vector_print(vector vec, void (*print)(type));
-void vector_map(vector vec, type (*f)(type));
+vector vector_map(vector vec, type (*f)(type));
 
 #endif
\ No newline at end of file
diff --git a/src/test_vectors.c b/src/test_vectors.c
index bc8f37263f3d2a164089ede0c71ba11e89f0c4ea..01db5a0c5d23162a59ac6de7a1f3ffe386622e17 100644
--- a/src/test_vectors.c
+++ b/src/test_vectors.c
@@ -59,14 +59,17 @@ int main()
 	}
 	vector_print(test, &print_type);
 	printf("\n");
-	
+
 	//Test Vector map
-	vector_map(test, &times_two);
-	vector_print(test, &print_type);
+	vector test_2 = vector_map(test, &times_two);
+	vector_print(test_2, &print_type);
+
+	//Test Vector filter
 
 	//Test Vector Free
 	vector_free(test);
-
+	vector_free(test_2);
+	
 	return 0;
 }
 
diff --git a/src/vectors.c b/src/vectors.c
index d5dad3fc2a9c05fc04f308e5b08d37a6e8a3d8e6..92590bb2a5e415a96972390e5c8eb38c82a9e800 100644
--- a/src/vectors.c
+++ b/src/vectors.c
@@ -137,10 +137,13 @@ void vector_print(vector vec, void (*print)(type))
 	}
 }
 
-void vector_map(vector vec, type (*f)(type))
+vector vector_map(vector vec, type (*f)(type))
 {
+	vector new_vec = vector_create();
 	for (int i = 0; i < vec->length; i++)
 	{
-		vec->content[i] = f(vec->content[i]);
+		vector_push(new_vec, f(vec->content[i]));
 	}
-}
\ No newline at end of file
+	return new_vec;
+}
+