diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6e186ba8e1428f5e5dcec38626cb787369ea02c5..d1fe608c0d7337550f980c104de95dfdf560eb62 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,9 +1,11 @@
 #
-#  Copyright
+#  Copyright 2010 CNRS
+#  Author: Florent Lamiraux
 #
 
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
+INCLUDE(cmake/base.cmake)
 SET(PROJECT_NAME dynamic-graph-python)
 project(${PROJECT_NAME})
 
@@ -37,8 +39,9 @@ SET(PACKAGE_REQUIREMENTS "")
 SET(DYNAMIC_GRAPH_FOUND 0)
 SET(DYNAMIC_GRAPH_REQUIRED "dynamic-graph >= 1.0")
 PKG_CHECK_MODULES(DYNAMIC_GRAPH REQUIRED ${DYNAMIC_GRAPH_REQUIRED})
-EXEC_PROGRAM(${PKG_CONFIG_EXECUTABLE} ARGS  --variable=docdir dynamic-graph
-  OUTPUT_VARIABLE DYNAMIC_GRAPH_DOCDIR)
+EXEC_PROGRAM(${PKG_CONFIG_EXECUTABLE} ARGS
+  --variable=doxygendocdir dynamic-graph
+  OUTPUT_VARIABLE DYNAMIC_GRAPH_DOXYGENDOCDIR)
 MESSAGE(STATUS "pkg-config: ${PKG_CONFIG_EXECUTABLE}")
 MESSAGE(STATUS "DYNAMIC_GRAPH_DOCDIR=${DYNAMIC_GRAPH_DOCDIR}")
 SET(DYNAMIC_GRAPH_FOUND 1)
@@ -78,7 +81,5 @@ ADD_SUBDIRECTORY(src)
 #
 # Documentation produced by doxygen
 #
-INCLUDE(FindDoxygen)
-IF(DOXYGEN_FOUND)
-  add_subdirectory(doc)
-ENDIF(DOXYGEN_FOUND)
+SET(SPHINX_EXECUTABLE sphinx-build)
+add_subdirectory(doc)
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index 2b6030ae463d04102913e7e771d6982f330747a1..c1234898ae4e79ff260d30d4a57f9c7d7455eadb 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -1,15 +1,15 @@
-# 
-#  Copyright 
-# 
-
-# Configure package.dox file
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package.dox.cmake
-  ${CMAKE_CURRENT_BINARY_DIR}/package.dox
-)
+#
+#  Copyright 2010 CNRS
+#  Author: Florent Lamiraux
+#
 
+CONFIG_FILES_CMAKE(
+  sphinx/index.rst
+  sphinx/conf.py
+  )
 
 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html
-  COMMAND ${DOXYGEN_EXECUTABLE} \"${CMAKE_CURRENT_BINARY_DIR}/package.dox\"
+  COMMAND ${SPHINX_EXECUTABLE} -b html \"${CMAKE_CURRENT_BINARY_DIR}/sphinx\" \"${CMAKE_CURRENT_BINARY_DIR}/sphinx-html\"
 )
 
 ADD_CUSTOM_TARGET(documentation ALL
@@ -20,13 +20,9 @@ ADD_CUSTOM_TARGET(documentation ALL
 #
 
 # html files
-INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/sphinx-html
   DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME})
 
-# doxytag
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.doxytag
-  DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}/html)
-
 # pictures
 INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/pictures
-  DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}/html)
+  DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME})
diff --git a/src/dynamic_graph/signal_base.py b/src/dynamic_graph/signal_base.py
index 71e69bee0ab1167bd7fc46167a9f02e8877e3415..325fec5dee6c22cac3a33f513f8c464490b12133 100644
--- a/src/dynamic_graph/signal_base.py
+++ b/src/dynamic_graph/signal_base.py
@@ -167,7 +167,23 @@ class SignalBase (object) :
     @property
     def value(self) :
         """
-        Read the value of a signal
+        Setter and getter for the value of a signal
+
+        Binds C++ SignalBase<int>::get() and set() methods. Values are passed
+        through string streams.
+        A string is interpreted as respectively:
+            * a matrix (tuple of tuple) if string fits '[n,m]((x_11,x_12,...,x_1m),...,(x_n1,x_n2,...,x_nm))' format where n and m are integers, x_ij are floating point numbers,
+            * a tuple if string fits '[n](x_1, x_2, ..., x_n)' format,
+            * an integer,
+            * a floating point number.
+
+        If string fits none of the above formats, no conversion is performed.
+
+        For instance, is s binds a signal of type vector,
+            >>> s.value = (2.5, .1, 1e2)
+        will call SignalBase<int>::set("[3](2.5,0.1,100.0)") and
+            >>> s.value
+            (2.5, 0.1, 100.0)
         """
         string = wrap.signal_base_get_value(self.object)
         return stringToObject(string)