diff --git a/doc/LaTex/DDRecManual.tex b/doc/LaTex/DDRecManual.tex
index 17ea1c2b674dda710b08cd8bf965b5705afe6e90..21d1c0c344c9a603c073fd5c7864dae76156c69c 100644
--- a/doc/LaTex/DDRecManual.tex
+++ b/doc/LaTex/DDRecManual.tex
@@ -121,10 +121,10 @@ The \DDR API provides the following functionality:
   to positions of readout cells and vice versa
 \item access to a list of materials between any two points inside the world
   volume of the detector
-\item average material properties between two points
+\item access to the materials at any given point or along a straight line between two points
+\item averaged material properties for a list of materials
 \item computation of radiation and interaction lenghts for detector layers, modules
   or arbitrary sections through the detector
-\item ...
 \end{itemize}
 
 \noindent
@@ -540,6 +540,86 @@ of a reconstruction program for caching material properties !}
 
 
 
+%=============================================================================
+\section{IDDecoder}
+\label{sec:ddrec-manual-iddecoder}
+%=============================================================================
+Sensitive volumes in a \DDH geometry model are assigned a unique volume-ID. 
+This ID is then used by the corresponding {\em DDSegmentation} object
+to create a unique cellID for tracker and calorimeter hits, allowing
+to uniquely match hits to their sensitive volumes and also to their
+{\em DetElements} if they have been defined appropriately.
+During reconstruction tasks, including digitization of simulated hits,
+one often needs to convert between a cellID assigned to the hit and 
+the position of the corresponding detector cell. 
+For example one could write out simulated calorimeter hits without position
+information in order to save disk space and retrieve the position information
+based on the cellID. Another application might be a clustering algorithm
+where one looks for hits in the neighbor cells of a given hit.
+
+\noindent
+The functionality to do this is provided by the {\em IDDecoder} class with
+the following interface:
+
+\begin{code}
+  class IDDecoder {
+  public:
+     /// Default constructor using the name of the corresponding readout collection
+    IDDecoder(const std::string& collectionName);
+    
+     /// Default constructor using a readout object
+    IDDecoder(const Geometry::Readout& readout);
+    
+     /// Destructor
+    virtual ~IDDecoder();
+    
+     /// Returns the cell ID from the local position in the given volume ID.
+    CellID cellIDFromLocal(const Geometry::Position& local, const VolumeID volumeID) const;
+    
+     /// Returns the global cell ID from a given global position
+    CellID cellID(const Geometry::Position& global) const;
+    
+     /// Returns the global position from a given cell ID
+    Geometry::Position position(const CellID& cellID) const;
+    
+     /// Returns the local position from a given cell ID
+    Geometry::Position localPosition(const CellID& cellID) const;
+    
+     /// Returns the volume ID of a given cell ID
+    VolumeID volumeID(const CellID& cellID) const;
+    
+     /// Returns the volume ID of a given global position
+    VolumeID volumeID(const Geometry::Position& global) const;
+    
+     /// Returns the placement for a given cell ID
+    Geometry::PlacedVolume placement(const CellID& cellID) const;
+    
+     /// Returns the placement for a given global position
+    Geometry::PlacedVolume placement(const Geometry::Position& global) const;
+    
+     /// Returns the subdetector for a given cell ID
+    Geometry::DetElement subDetector(const CellID& cellID) const;
+    
+     /// Returns the subdetector for a given global position
+    Geometry::DetElement subDetector(const Geometry::Position& global) const;
+    
+     /// Returns the closest detector element in the hierarchy for a given cell ID
+    Geometry::DetElement detectorElement(const CellID& cellID) const;
+    
+     /// Returns the closest detector element in the hierarchy for a given global position
+    Geometry::DetElement detectorElement(const Geometry::Position& global) const;
+    
+     /// Calculates the neighbours of the given cell ID and adds them to the list of neighbours
+    void neighbours(const CellID& cellID, std::set<CellID>& neighbours) const;
+    
+     /// Checks if the given cell IDs are neighbours
+    bool areNeighbours(const CellID& cellID, const CellID& otherCellID) const;
+}
+\end{code}
+
+
+
+
 %=============================================================================
 \section{Detectors}
 \label{sec:ddrec-manual-detectors}