diff --git a/CMakeLists.txt b/CMakeLists.txt
index d91a063971fbf03cfbc72850eab01522c43210ff..de4cc9e2aaf9d2863c2b5531e48b1bdb05b4556f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.12)
 
 project(
   "matplotlibcpp17"
-  VERSION 1.0.0
+  VERSION 1.0.4
   DESCRIPTION
     "A C++ header-only plotting library based on pybind11 and matplotlib, featuring more flexibility than matplotlibcpp"
   HOMEPAGE_URL "https://soblin.github.io/matplotlibcpp17/")
@@ -13,13 +13,14 @@ find_package(
   REQUIRED)
 find_package(pybind11 2.4.3 REQUIRED)
 
-# check matplotlib minor version
+# ##############################################################################
+# (1) check matplotlib minor version
+# ##############################################################################
 execute_process(
   COMMAND ${Python3_EXECUTABLE} "-c" "import matplotlib;
 print(str(matplotlib.__version__), end='')"
   RESULT_VARIABLE MATPLOTLIB_VERSION_CHECKING
   OUTPUT_VARIABLE MATPLOTLIB_VERSION)
-
 if(NOT MATPLOTLIB_VERSION_CHECKING MATCHES 0)
   message(FATAL_ERROR "Could not check matplotlib.__version__")
 endif()
@@ -32,55 +33,15 @@ else()
   set(MATPLOTLIB_MINOR_VER_GTE_4 1)
 endif()
 
-# gallery
-if(NOT DEFINED USE_GUI)
-  set(USE_GUI 0)
-  message(STATUS "set USE_GUI = OFF")
-endif()
-if(NOT DEFINED ADD_DEMO)
-  set(ADD_DEMO 0)
-  message(STATUS "set ADD_DEMO = OFF")
-endif()
-if(USE_GUI)
-  message(STATUS "USE_GUI = ON")
-else()
-  message(STATUS "USE_GUI = OFF")
-endif()
-if(ADD_DEMO)
-  message(STATUS "ADD_DEMO = ON")
-else()
-  message(STATUS "ADD_DEMO = OFF")
-endif()
-
-function(add_demo name path)
-  add_executable(${name} ${path})
-  target_include_directories(${name} PUBLIC ${Python3_INCLUDE_DIRS}
-                                            ${matplotlibcpp17_INCLUDE_DIRS})
-  target_link_libraries(${name} ${Python3_LIBRARIES} pybind11::embed xtensor)
-endfunction()
-
-if(${ADD_DEMO})
-  find_package(
-    Python3
-    COMPONENTS NumPy
-    REQUIRED)
-  find_package(xtensor 0.24.0 REQUIRED)
-  set(CMAKE_CXX_STANDARD 17)
-  set(CMAKE_CXX_FLAGS
-      "-Wall -g -DUSE_GUI=${USE_GUI} -DMATPLOTLIB_MINOR_VER_GTE_4=${MATPLOTLIB_MINOR_VER_GTE_4}"
-  )
-  add_subdirectory(gallery/tests)
-  add_subdirectory(gallery/lines_bars_and_markers)
-  add_subdirectory(gallery/subplots_axes_and_figures)
-  add_subdirectory(gallery/statistics)
-  add_subdirectory(gallery/images_contours_and_fields)
-  add_subdirectory(gallery/shapes_and_collections)
-  add_subdirectory(gallery/artist_animation)
-  add_subdirectory(gallery/mplot3d)
-  add_subdirectory(gallery/scales)
-endif()
+target_include_directories(
+  ${PROJECT_NAME}
+  INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+            $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_17)
 
-# for add_subdirectory
+# ##############################################################################
+# (2) for add_subdirectory
+# ##############################################################################
 add_library(matplotlibcpp17::matplotlibcpp17 INTERFACE IMPORTED GLOBAL)
 set_property(
   TARGET matplotlibcpp17::matplotlibcpp17
@@ -90,14 +51,13 @@ set_property(
   TARGET matplotlibcpp17::matplotlibcpp17
   PROPERTY INTERFACE_LINK_LIBRARIES ${Python3_LIBRARIES} pybind11::embed)
 
-# install https://dominikberner.ch/cmake-interface-lib/
+# ##############################################################################
+# (3) install
+# ##############################################################################
+# https://dominikberner.ch/cmake-interface-lib/
 include(GNUInstallDirs)
+# header-only library(INTERFACE)
 add_library(${PROJECT_NAME} INTERFACE)
-target_include_directories(
-  ${PROJECT_NAME}
-  INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-            $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
-target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_17)
 install(
   TARGETS ${PROJECT_NAME}
   EXPORT ${PROJECT_NAME}_Targets
@@ -129,6 +89,9 @@ set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
 # create .deb
 include("${PROJECT_SOURCE_DIR}/cmake/package.cmake")
 
+# ##############################################################################
+# (4) uninstall
+# ##############################################################################
 # https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake
 if(NOT TARGET uninstall)
   configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall.cmake.in"
@@ -137,3 +100,53 @@ if(NOT TARGET uninstall)
     uninstall COMMAND ${CMAKE_COMMAND} -P
                       ${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake)
 endif()
+
+# ##############################################################################
+# (5) gallery
+# ##############################################################################
+if(NOT DEFINED USE_GUI)
+  set(USE_GUI 0)
+  message(STATUS "set USE_GUI = OFF")
+endif()
+if(NOT DEFINED ADD_DEMO)
+  set(ADD_DEMO 0)
+  message(STATUS "set ADD_DEMO = OFF")
+endif()
+if(USE_GUI)
+  message(STATUS "USE_GUI = ON")
+else()
+  message(STATUS "USE_GUI = OFF")
+endif()
+if(ADD_DEMO)
+  message(STATUS "ADD_DEMO = ON")
+else()
+  message(STATUS "ADD_DEMO = OFF")
+endif()
+
+function(add_demo name path)
+  add_executable(${name} ${path})
+  target_include_directories(${name} PUBLIC ${Python3_INCLUDE_DIRS}
+                                            ${matplotlibcpp17_INCLUDE_DIRS})
+  target_link_libraries(${name} ${Python3_LIBRARIES} pybind11::embed xtensor)
+endfunction()
+
+if(${ADD_DEMO})
+  find_package(
+    Python3
+    COMPONENTS NumPy
+    REQUIRED)
+  find_package(xtensor 0.24.0 REQUIRED)
+  set(CMAKE_CXX_STANDARD 17)
+  set(CMAKE_CXX_FLAGS
+      "-Wall -g -DUSE_GUI=${USE_GUI} -DMATPLOTLIB_MINOR_VER_GTE_4=${MATPLOTLIB_MINOR_VER_GTE_4}"
+  )
+  add_subdirectory(gallery/tests)
+  add_subdirectory(gallery/lines_bars_and_markers)
+  add_subdirectory(gallery/subplots_axes_and_figures)
+  add_subdirectory(gallery/statistics)
+  add_subdirectory(gallery/images_contours_and_fields)
+  add_subdirectory(gallery/shapes_and_collections)
+  add_subdirectory(gallery/artist_animation)
+  add_subdirectory(gallery/mplot3d)
+  add_subdirectory(gallery/scales)
+endif()