diff --git a/apps/plots.py b/apps/plots.py
index 777ffd2566f1dd822a89ce90d6d1a22823dd15fd..277cd656d121a3d924d263285c2076cfe82e6898 100644
--- a/apps/plots.py
+++ b/apps/plots.py
@@ -48,11 +48,13 @@ def add_points(fig, ax, points):
     ax.plot(x, y, 'k.')
     return fig, ax
 
-# points is a list of numpy arrays of dim n x 2
+# polygons is a list of numpy arrays, for which each row gives a vertex
 def add_polygons(fig, ax, polygons):
     for polygon in polygons:
-        p = mpl.patches.Polygon(polygon, True, fill=False, color="black", zorder=2)
+        # only plot first two dims
+        p = mpl.patches.Polygon(polygon[:,0:2], True, fill=False, color="black", zorder=2)
         ax.add_patch(p)
+        # theoretically patch collections could be more efficient
         #p = PatchCollection(patches, alpha=0.4)
         #ax.add_collection(p)
     return fig, ax
diff --git a/cmake/make_plot_target.cmake b/cmake/make_plot_target.cmake
index 3c58735a50af00c7395c77f0aa7d27613de44667..5c0ea60c922ae49d958bf7d97180f621d37b520f 100644
--- a/cmake/make_plot_target.cmake
+++ b/cmake/make_plot_target.cmake
@@ -1,22 +1,24 @@
 # TODO Enable arguments to be passed to the C++ executable
-function(make_plot_target TARGET)
+function(make_plot_target TARGET ID)
+    message(${ID})
+    cmake_parse_arguments(PLOT "" "" "ARGS" ${ARGN})
     if (VISUALIZE)
         add_custom_command(
-            OUTPUT ${TARGET}_log.json ${TARGET}_vis.json
-            COMMAND ${TARGET} ${TARGET}_log.json ${TARGET}_vis.json
+            OUTPUT ${TARGET}_log_${ID}.json ${TARGET}_vis_${ID}.json
+            COMMAND ${TARGET} ${TARGET}_log_${ID}.json ${TARGET}_vis_${ID}.json ${PLOT_ARGS}
             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
             DEPENDS ${TARGET}
         )
 
         add_custom_command(
-            OUTPUT ${TARGET}_plot.pdf
-            COMMAND python3 ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis.json ${TARGET}_plot.pdf
+            OUTPUT ${TARGET}_plot_${ID}.pdf
+            COMMAND python3 ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis_${ID}.json ${TARGET}_plot_${ID}.pdf
             WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-            DEPENDS ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis.json 
+            DEPENDS ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis_${ID}.json
         )
 
-        add_custom_target(${TARGET}_plot
-            DEPENDS ${TARGET}_plot.pdf
+        add_custom_target(${TARGET}_plot_${ID}
+            DEPENDS ${TARGET}_plot_${ID}.pdf
         )
     endif()
 endfunction()
diff --git a/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt b/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt
index 85359f49630c66a8bfada7eefcf23a3d7bed2196..273708d2097d919733a9f461dfd034e2c1ec856c 100644
--- a/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt
+++ b/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt
@@ -3,5 +3,6 @@ if (VISUALIZE)
         main.cpp
     )
     target_link_libraries(conjugate_gradient_descent optimization_lib clara)
-    make_plot_target(conjugate_gradient_descent)
+    make_plot_target(conjugate_gradient_descent 2d ARGS -d 2)
+    make_plot_target(conjugate_gradient_descent 10d ARGS -d 10)
 endif()
diff --git a/optimization/optimizers/gradient_descent/CMakeLists.txt b/optimization/optimizers/gradient_descent/CMakeLists.txt
index cf64b2f10cb82025678a533a90d08ea6b50a269d..e66c1437d1fabc91d480df3c6a1fc85f61a888ec 100644
--- a/optimization/optimizers/gradient_descent/CMakeLists.txt
+++ b/optimization/optimizers/gradient_descent/CMakeLists.txt
@@ -3,5 +3,6 @@ if (VISUALIZE)
         main.cpp
     )
     target_link_libraries(gradient_descent optimization_lib clara)
-    make_plot_target(gradient_descent)
+    make_plot_target(gradient_descent 2d ARGS -d 2)
+    make_plot_target(gradient_descent 10d ARGS -d 10)
 endif()
diff --git a/optimization/optimizers/nelder_mead/CMakeLists.txt b/optimization/optimizers/nelder_mead/CMakeLists.txt
index feb04084dd19f3189ed394f0cf7146690152956a..e057569b3d516dc5a064b938b9507e038425bf7f 100644
--- a/optimization/optimizers/nelder_mead/CMakeLists.txt
+++ b/optimization/optimizers/nelder_mead/CMakeLists.txt
@@ -3,5 +3,6 @@ if (VISUALIZE)
         main.cpp
     )
     target_link_libraries(nelder_mead optimization_lib clara)
-    make_plot_target(nelder_mead)
+    make_plot_target(nelder_mead 2d ARGS -d 2)
+    make_plot_target(nelder_mead 10d ARGS -d 10)
 endif()