diff --git a/pub/lib/CMakeLists.txt b/pub/lib/CMakeLists.txt
index ebc355f68d480632c8bd7573aad5922b9eba363b..1973aed2253528fa642990673f537bcd041f8a5a 100644
--- a/pub/lib/CMakeLists.txt
+++ b/pub/lib/CMakeLists.txt
@@ -39,10 +39,10 @@ opr.cpp
 plot.cpp
 reg.cpp
 rssm.cpp
+slice.cpp
 special.cpp
 toplevel.cpp
 var.cpp
-zentry.cpp
 )
 
 SET(inc_files
@@ -73,11 +73,11 @@ plot.hpp
 ptr.hpp
 reg.hpp
 rssm.hpp
+slice.hpp
 special.hpp
 toplevel.hpp
 var.hpp
 xax_lex.hpp
-zentry.hpp
 )
 
 ADD_LIBRARY(libfrida SHARED
@@ -99,4 +99,4 @@ ${YAMLCPP_LIBRARY}
 ${LIBLMFIT_LIBS}
 )
 
-INSTALL(TARGETS libfrida DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
\ No newline at end of file
+INSTALL(TARGETS libfrida DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
diff --git a/pub/lib/Doxyfile b/pub/lib/Doxyfile
index e71e986b0ab2e6a439955d310224fede03e8a715..91ace4c7b1f9eb041abfbfbe3352914216738c13 100644
--- a/pub/lib/Doxyfile
+++ b/pub/lib/Doxyfile
@@ -1,4 +1,4 @@
-# Doxyfile 1.8.6
+# Doxyfile 1.8.8
 
 # This file describes the settings to be used by the documentation system
 # doxygen (www.doxygen.org) for a project.
@@ -70,6 +70,14 @@ OUTPUT_DIRECTORY       = ../../
 
 CREATE_SUBDIRS         = NO
 
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
 # documentation generated by doxygen is written. Doxygen will use this
 # information to generate all constant output in the proper language.
@@ -261,9 +269,12 @@ OPTIMIZE_OUTPUT_VHDL   = NO
 # extension. Doxygen has a built-in mapping, but you can override or extend it
 # using this tag. The format is ext=language, where ext is a file extension, and
 # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-# (default is Fortran), use: inc=Fortran f=C.
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
 #
 # Note For files without extension you can use no_extension as a placeholder.
 #
@@ -669,8 +680,7 @@ LAYOUT_FILE            =
 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
 # For LaTeX the style of the bibliography can be controlled using
 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. Do not use file names with spaces, bibtex cannot handle them. See
-# also \cite for info how to create references.
+# search path. See also \cite for info how to create references.
 
 CITE_BIB_FILES         =
 
@@ -970,6 +980,25 @@ USE_HTAGS              = NO
 
 VERBATIM_HEADERS       = YES
 
+# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# compiled with the --with-libclang option.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          =
+
 #---------------------------------------------------------------------------
 # Configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
@@ -1062,13 +1091,15 @@ HTML_FOOTER            =
 
 HTML_STYLESHEET        =
 
-# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
-# defined cascading style sheet that is included after the standard style sheets
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
 # created by doxygen. Using this option one can overrule certain style aspects.
 # This is preferred over using HTML_STYLESHEET since it does not replace the
 # standard style sheet and is therefor more robust against future updates.
-# Doxygen will copy the style sheet file to the output directory. For an example
-# see the documentation.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra stylesheet files is of importance (e.g. the last
+# stylesheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_EXTRA_STYLESHEET  =
@@ -1233,7 +1264,8 @@ GENERATE_CHI           = NO
 CHM_INDEX_ENCODING     =
 
 # The BINARY_TOC flag controls whether a binary table of contents is generated (
-# YES) or a normal table of contents ( NO) in the .chm file.
+# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
 # The default value is: NO.
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
@@ -1473,11 +1505,11 @@ SEARCHENGINE           = YES
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a web server instead of a web client using Javascript. There
-# are two flavours of web server based searching depending on the
-# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
-# searching and an index file used by the script. When EXTERNAL_SEARCH is
-# enabled the indexing and searching needs to be provided by external tools. See
-# the section "External Indexing and Searching" for details.
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
 # The default value is: NO.
 # This tag requires that the tag SEARCHENGINE is set to YES.
 
@@ -1605,17 +1637,19 @@ EXTRA_PACKAGES         =
 #
 # Note: Only use a user-defined header if you know what you are doing! The
 # following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
-# replace them by respectively the title of the page, the current date and time,
-# only the current date, the version number of doxygen, the project name (see
-# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
+# for the replacement values of the other commands the user is refered to
+# HTML_HEADER.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_HEADER           =
 
 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
 # generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer.
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
 #
 # Note: Only use a user-defined footer if you know what you are doing!
 # This tag requires that the tag GENERATE_LATEX is set to YES.
@@ -1639,7 +1673,7 @@ LATEX_EXTRA_FILES      =
 
 PDF_HYPERLINKS         = YES
 
-# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
 # the PDF file directly from the LaTeX files. Set this option to YES to get a
 # higher quality PDF documentation.
 # The default value is: YES.
@@ -1765,6 +1799,13 @@ MAN_OUTPUT             = man
 
 MAN_EXTENSION          = .3
 
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
 # will generate one additional man file for each entity documented in the real
 # man page(s). These additional files only source the real man page, but without
@@ -1792,18 +1833,6 @@ GENERATE_XML           = NO
 
 XML_OUTPUT             = xml
 
-# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
-# validating XML parser to check the syntax of the XML files.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
-# validating XML parser to check the syntax of the XML files.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_DTD                =
-
 # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
 # listings (including syntax highlighting and cross-referencing information) to
 # the XML output. Note that enabling this will significantly increase the size
@@ -1831,6 +1860,15 @@ GENERATE_DOCBOOK       = NO
 
 DOCBOOK_OUTPUT         = docbook
 
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
 #---------------------------------------------------------------------------
 # Configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
@@ -1950,9 +1988,9 @@ PREDEFINED             =
 EXPAND_AS_DEFINED      =
 
 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all refrences to function-like macros that are alone on a line, have an
-# all uppercase name, and do not end with a semicolon. Such function macros are
-# typically used for boiler-plate code, and will confuse the parser if not
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
 # removed.
 # The default value is: YES.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
@@ -1972,7 +2010,7 @@ SKIP_FUNCTION_MACROS   = YES
 # where loc1 and loc2 can be relative or absolute paths or URLs. See the
 # section "Linking to external documentation" for more information about the use
 # of tag files.
-# Note: Each tag file must have an unique name (where the name does NOT include
+# Note: Each tag file must have a unique name (where the name does NOT include
 # the path). If a tag file is not located in the directory in which doxygen is
 # run, you must also specify the path to the tagfile here.
 
@@ -2050,7 +2088,7 @@ HIDE_UNDOC_RELATIONS   = YES
 # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
 # Bell Labs. The other options in this section have no effect if this option is
 # set to NO
-# The default value is: NO.
+# The default value is: YES.
 
 HAVE_DOT               = YES
 
@@ -2064,7 +2102,7 @@ HAVE_DOT               = YES
 
 DOT_NUM_THREADS        = 0
 
-# When you want a differently looking font n the dot files that doxygen
+# When you want a differently looking font in the dot files that doxygen
 # generates you can specify the font name using DOT_FONTNAME. You need to make
 # sure dot is able to find the font, which can be done by putting it in a
 # standard location or by setting the DOTFONTPATH environment variable or by
@@ -2072,7 +2110,7 @@ DOT_NUM_THREADS        = 0
 # The default value is: Helvetica.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
-DOT_FONTNAME           = 
+DOT_FONTNAME           =
 
 # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
 # dot graphs.
@@ -2202,7 +2240,9 @@ DIRECTORY_GRAPH        = YES
 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
 # to make the SVG files visible in IE 9+ (other browsers do not have this
 # requirement).
-# Possible values are: png, jpg, gif and svg.
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd and svg.
 # The default value is: png.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
@@ -2245,6 +2285,15 @@ MSCFILE_DIRS           =
 
 DIAFILE_DIRS           =
 
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+PLANTUML_JAR_PATH      =
+
 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
 # that will be shown in the graph. If the number of nodes in a graph becomes
 # larger than this value, doxygen will truncate the graph, which is visualized
diff --git a/pub/lib/axis.cpp b/pub/lib/axis.cpp
index 81f9597b1212cfcddd28118d639dd92c7a243896..0ed9a8bb7caba84373b0325fd033833aaa01954d 100644
--- a/pub/lib/axis.cpp
+++ b/pub/lib/axis.cpp
@@ -5,7 +5,7 @@
 //***************************************************************************//
 
 //! \file  axis.cpp
-//! \brief CAxis: one axis of a coordinate frame
+//! \brief CAxis: One axis of a coordinate frame.
 
 #include <cmath>
 #include <iostream>
@@ -18,9 +18,7 @@
 #include "axis.hpp"
 
 
-
-//! Set invalid limits.
-//  This means: next plot call will automatically recalculate them.
+//! Sets infinite limits so that next plot call will recompute them.
 
 void CAxis::setAuto()
 {
@@ -29,22 +27,20 @@ void CAxis::setAuto()
 }
 
 
-//! Check and set limits.
+//! Sets limits to arguments.
 
-void CAxis::setLimits( string axnam, double _inf, double _sup )
+void CAxis::setLimits( double _inf, double _sup )
 {
     if( _inf>=_sup )
-        throw "Cannot set " + axnam + " plot range " +
-            S(_inf) + " .. " + S(_sup);
+        throw "Invalid limits "+S(_inf)+" .. "+S(_sup)+" for axis "+name;
     if( logflag && _inf<=0 )
-        throw "Cannot set log " + axnam + " plot range " +
-            S(_inf) + " .. " + S(_sup);
+        throw "Invalid nonpositive limit "+S(_inf)+" for axis " + name;
     inf = _inf;
     sup = _sup;
 }
 
 
-//! Set lin or log, reset ranges to auto.
+//! Sets log flag to argument, resets limits to infinite defaults.
 
 void CAxis::setLog( bool _log )
 {
@@ -53,7 +49,7 @@ void CAxis::setLog( bool _log )
 }
 
 
-//! Parse string to set bounds.
+//! Asks for new limits.
 
 void CAxis::ask_and_set( const string& quest )
 {
@@ -117,20 +113,20 @@ void CAxis::ask_and_set( const string& quest )
 }
 
 
-//! Replace limits by rounded values.
+//! Sets limits to rounded values of arguments.
 
-void CAxis::setRoundedLimits( string axnam, double _inf, double _sup )
+void CAxis::setRoundedLimits( double _inf, double _sup )
 {
     static double relmargin = 0.05;
     static double digits = 2;
 
     if ( _inf==-INFINITY || _sup==+INFINITY )
-        throw "BUG: rounding " + axnam + " limits: unexpected inf limits";
+        throw "BUG: rounding " + name + " limits: unexpected inf limits";
     if( _inf>_sup )
-        throw "BUG: rounding " + axnam + " limits: invalid plot range " +
+        throw "BUG: rounding " + name + " limits: invalid plot range " +
             S(_inf) + " > " + S(_sup);
     if( logflag && _inf<=0 )
-        throw "BUG: rounding " + axnam + " limits: nonpositive log inf " +
+        throw "BUG: rounding " + name + " limits: nonpositive log inf " +
             S(_inf);
 
     inf = _inf;
@@ -175,11 +171,11 @@ void CAxis::setRoundedLimits( string axnam, double _inf, double _sup )
             mydigits += 0.5;
         } while ( !((inf2<inf) && (sup<sup2)) );
     }
-    setLimits( axnam, inf2, sup2 );
+    setLimits( inf2, sup2 );
 }
 
 
-//! Have finite limits been set ?
+//! Are both limits finite ?
 
 bool CAxis::finite() const
 {
@@ -187,7 +183,7 @@ bool CAxis::finite() const
 }
 
 
-//! Is value val contained in this range?
+//! Is argument val contained in present plot range?
 
 bool CAxis::contains(double val) const
 {
@@ -195,7 +191,7 @@ bool CAxis::contains(double val) const
 }
 
 
-//! Do values v1 and v2 agree within tolerance tol, relative to axis span?
+//! Do arguments v1 and v2 agree within tolerance tol, relative to plot range?
 
 bool CAxis::close_enough( double v1, double v2, double tol ) const
 {
@@ -211,7 +207,7 @@ bool CAxis::close_enough( double v1, double v2, double tol ) const
 }
 
 
-//! Map application scale (inf..sup) to linear plot scale (0..1).
+//! Returns plot coordinate (between 0 and 1) of argument.
 
 double CAxis::value2plotcoord( double v ) const
 {
@@ -227,7 +223,7 @@ double CAxis::value2plotcoord( double v ) const
 }
 
 
-//! Error bar in plot coords.
+//! Returns half length of error bar (in plot coordinates 0..1).
 
 double CAxis::value2ploterror( double v, double dv ) const
 {
@@ -247,7 +243,7 @@ double CAxis::value2ploterror( double v, double dv ) const
 }
 
 
-//! Map linear plot scale (0..n-1) to application scale (inf..sup).
+//! Sets vector x such that its plot coordinates form an equidistent grid.
 
 void CAxis::set_xgrid( vector<double>& x, int n ) const
 {
@@ -271,7 +267,7 @@ void CAxis::set_xgrid( vector<double>& x, int n ) const
 }
 
 
-//! String representation.
+//! Returns string representation of plot range.
 
 string CAxis::str() const
 {
@@ -282,7 +278,7 @@ string CAxis::str() const
 }
 
 
-//! Describe range, for use in table of plot frames.
+//! Returns summary (log flag, plot limits) for use in table of plot frames.
 
 string CAxis::info() const
 {
@@ -294,7 +290,7 @@ string CAxis::info() const
 }
 
 
-//! Convert value -> plot_coordinate (my PostScript units 0..10).
+//! Returns argument converted to my PostScript units (0..10).
 
 double CAxis::pc( double v ) const
 {
@@ -302,7 +298,7 @@ double CAxis::pc( double v ) const
 }
 
 
-//! Error bar in my PostScript units 0..10.
+//! Returns half length of error bar (in my Postscript coordinates 0..10).
 
 double CAxis::pcerr( double v, double dv ) const
 {
@@ -310,9 +306,7 @@ double CAxis::pcerr( double v, double dv ) const
 }
 
 
-//! Calculate appropriate division of plot axis.
-
-//  All three arguments are for output only.
+//! Sets Tacks, *ntpt, *ticklim to a nice division of the plot range.
 
 void CAxis::calc_ticks( vector<double>& Tacks, int *ntpt, double *ticklim)
     const
diff --git a/pub/lib/axis.hpp b/pub/lib/axis.hpp
index ec0bdbc279b5a58eec901687420d34c06984f5ef..1482711ac72858b20097d8cb27cd0df6440f40e9 100644
--- a/pub/lib/axis.hpp
+++ b/pub/lib/axis.hpp
@@ -5,24 +5,26 @@
 //**************************************************************************//
 
 //! \file  axis.hpp
-//! \brief CAxis: one axis of a coordinate frame
+//! \brief CAxis: One axis of a coordinate frame.
 
-//! One axis of a coordinate system, for use in plotting.
+//! One axis of a coordinate frame, for use in plotting.
 
 class CAxis {
  public:
-    double inf, sup; // defining plot range [inf..sup]
-    bool   logflag;  // use logarithmic axis ?
-    bool   force;    // force points into range [inf..sup] ?
+    string name;     //!< usually "x" or "y"
+    double inf;      //!< infimum: lower plot limit
+    double sup;      //!< supremum: upper plot limit
+    bool   logflag;  //!< is logarithmic ?
+    bool   force;    //!< force points into range ?
 
-    CAxis( bool _log ) :
-        logflag(_log), force(false) { setAuto(); }
+    CAxis( const string _name, bool _log ) :
+        name(_name), logflag(_log), force(false) { setAuto(); }
 
     void setLog( bool _log );
 
     void setAuto();
-    void setLimits( string axnam, double _inf, double _sup );
-    void setRoundedLimits( string axnam, double _inf, double _sup );
+    void setLimits( double _inf, double _sup );
+    void setRoundedLimits( double _inf, double _sup );
     void ask_and_set( const string& quest );
 
     string str() const;
@@ -35,7 +37,6 @@ class CAxis {
     void set_xgrid( vector<double>& x, int n ) const;
     double pc( double v ) const;
     double pcerr( double v, double dv ) const;
-    double inf_pos() const;
     void calc_ticks( vector<double>& Tacks, int *ntpt, double *ticklim )
         const;
 };
diff --git a/pub/lib/coord.cpp b/pub/lib/coord.cpp
index 0415bee0bc52a13ce8eecd40cabd6cddf0644907..e13a1e5bfe7424487d156441af8a58f33b6ead4f 100644
--- a/pub/lib/coord.cpp
+++ b/pub/lib/coord.cpp
@@ -5,7 +5,7 @@
 //***************************************************************************//
 
 //! \file  coord.cpp
-//! \brief coordinates CCoord, numeric parameters CParam
+//! \brief Coordinates CCoord, numeric parameters CParam.
 
 #include <cstring>
 #include <iostream>
diff --git a/pub/lib/coord.hpp b/pub/lib/coord.hpp
index 72531d9c163af4e96cca108e79ecba49fdc490c0..e0854b3b283f5878f02452b428e96758d5485a34 100644
--- a/pub/lib/coord.hpp
+++ b/pub/lib/coord.hpp
@@ -5,17 +5,22 @@
 //***************************************************************************//
 
 //! \file  coord.hpp
-//! \brief coordinates CCoord, numeric parameters CParam
+//! \brief Coordinates CCoord, numeric parameters CParam.
+
 
 //! A coordinate, consisting of a name and a unit.
 
 class CCoord {
  public:
-    string name, unit;
+    string name;
+    string unit;
 
+    //! Creates empty instance.
     CCoord() {};
+    //! Creates instance with given name and unit.
     CCoord( const string _name, const string _unit ) :
         name(_name), unit(_unit) {}
+    //! Creates instance. Given string will be parsed into name and unit.
     CCoord( const string in );
 
     void ask_and_set( const string& quest );
@@ -25,26 +30,33 @@ class CCoord {
     string str_compact( int maxlen=0 ) const;
     string str_ps() const;
     string to_a01() const;
-    bool defined() { return name!=""; }
     string load_a01(string);
 
+    //! Has this instance nonvoid contents?
+    bool defined() { return name!=""; }
+    //! Are two instances equal?
     bool operator== (const CCoord& Co2) const { 
         return (name==Co2.name) && (unit==Co2.unit); }
+    //! Returns negation of operator==.
     bool operator!= (const CCoord& Co2) const {
         return !(*this==Co2); }
 };
 
+
 //! A file-wide parameter, consisting of a coordinate and a value.
 
 class CParam {
  public:
     CCoord Co;
     double val;
-
-    CParam() {}
-    CParam( CCoord _Co, double _val=0 ) : Co(_Co), val(_val) {}
-    CParam( string _name, string _unit="", double _val=0 ) : 
-        Co( CCoord(_name, _unit) ), val(_val) {}
+    double dval; //!< Error of val. Still unused.
+
+    //! Creates instance with fully given contents.
+    CParam( CCoord _Co, double _val=0, double _dval=0 )
+        : Co(_Co), val(_val), dval(_dval) {}
+    //! Creates instance with fully given, partly unparsed contents.
+    CParam( string _name, string _unit="", double _val=0, double _dval=0 ) :
+        Co( CCoord(_name, _unit) ), val(_val), dval(_dval) {}
 };
 
 
diff --git a/pub/lib/curve.cpp b/pub/lib/curve.cpp
index 2758c5ac473697f0d10918c6e8ad25f6c6815342..cdb9ade11353a749b278a1ed74d5d97723052aa2 100644
--- a/pub/lib/curve.cpp
+++ b/pub/lib/curve.cpp
@@ -8,6 +8,7 @@
 //! \brief NCurveFile: create, inspect, modify curve files.
 
 #include <iostream>
+#include <cmath>
 #include <boost/format.hpp>
 
 #include <readplus/ask.hpp>
@@ -16,7 +17,7 @@
 #include "list.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "curve.hpp"
 #include "expr.hpp"
 #include "opr.hpp"
diff --git a/pub/lib/dualplot.cpp b/pub/lib/dualplot.cpp
index 61feafa72352e4be1025e3efc7ebf8431e74d287..1236a9e000738295f472650d5dda831006391438 100644
--- a/pub/lib/dualplot.cpp
+++ b/pub/lib/dualplot.cpp
@@ -7,6 +7,8 @@
 //! \file  dualplot.cpp
 //! \brief collection NPlot of plot frames CPlot
 
+#include <cstdio>
+#include <cmath>
 #include <cstring>
 #include <fcntl.h>
 #include <errno.h>
@@ -27,7 +29,7 @@ static const int mLin = 80; // max num of chars in PostScript line
 //! Constructor for plot window: setup for gnuplot and postscript.
 
 CPlot::CPlot( int _iPlot, bool _logx, bool _logy ) :
-    iPlot( _iPlot ), X( _logx ), Y( _logy ),
+    iPlot( _iPlot ), X( "x", _logx ), Y( "y", _logy ),
     maxpoints(20000), with_errors(true), equipoints(49), refine(true)
 {
     // == Initialization for Gnuplot ==
diff --git a/pub/lib/edif.cpp b/pub/lib/edif.cpp
index a14176a6c47259d8defcd31862673a05b3f5e9dc..2c03ca2aabac0663fc587a8fa535aa817ff3eb9a 100644
--- a/pub/lib/edif.cpp
+++ b/pub/lib/edif.cpp
@@ -18,7 +18,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "var.hpp"
 #include "edif.hpp"
 
diff --git a/pub/lib/expr.cpp b/pub/lib/expr.cpp
index 2e139a5514b83b5cef11341206353f7a91f602de..ef50565bcddc42c7e24e719683fdfe2d29741704 100644
--- a/pub/lib/expr.cpp
+++ b/pub/lib/expr.cpp
@@ -15,14 +15,16 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "expr.hpp"
 
+
 //***************************************************************************//
 //* CContext                                                                *//
 //***************************************************************************//
 
-//! Constructor. Set k,j,i, checking validity. Set other par's to default.
+
+//! Constructor. Sets k,j,i to arguments. Sets other members to defaults.
 
 CContext::CContext( int _k, int _j, int _i )
     : k(_k), j(_j), i(_i),                     // set from arguments
@@ -55,7 +57,8 @@ CContext::CContext( int _k, int _j, int _i )
             S(i)+">=ni="+S(ni);        
 }
 
-//! Request a vector of doubles, and set an input vector of points 't'.
+
+//! Sets request of a vector of doubles, corresponding to input points 't'.
 
 void CContext::request_VT( const vector<double> *_vt )
 {
@@ -66,7 +69,7 @@ void CContext::request_VT( const vector<double> *_vt )
         vt_step = 0;
 }
 
-//! Request a vector of indices.
+//! Sets request of a vector of _nv indices.
 
 void CContext::request_VI( int _nv )
 {
@@ -74,7 +77,7 @@ void CContext::request_VI( int _nv )
     nv = _nv;
 }
 
-//! Introspection, for debugging.
+//! Returns textual representation of the class instance.
 
 string CContext::context_info() const
 {
@@ -102,7 +105,8 @@ string CContext::context_info() const
 //* CResult                                                                 *//
 //***************************************************************************//
 
-//! Introspection, for debugging.
+
+//! Returns textual representation of the class instance, for debugging.
 
 string CResult::result_info() const
 {
@@ -119,23 +123,7 @@ string CResult::result_info() const
 //***************************************************************************//
 
 
-string CRef::ref_info() const
-{
-    string out = "ref: ";
-    if ( tk )
-        out += "tk[" + tk->tree_info() + "], ";
-    else
-        out += "tk=0, ";
-    if ( tj )
-        out += "tj[" + tj->tree_info() + "], ";
-    else
-        out += "tj=0, ";
-    if ( ti )
-        out += "ti[" + ti->tree_info() + "]";
-    else
-        out += "ti=0";
-    return out;
-}
+//! Returns file index k in given context.
 
 int CRef::get_k( const CContext& ctx ) const
 {
@@ -155,6 +143,9 @@ int CRef::get_k( const CContext& ctx ) const
     return k;
 }
 
+
+//! Returns spectrum index j in given context.
+
 int CRef::get_j( const CContext& ctx, int nj ) const
 {
     try {
@@ -180,12 +171,32 @@ int CRef::get_j( const CContext& ctx, int nj ) const
     }
 }
 
+//! Returns string representation of the class instance.
+
+string CRef::ref_info() const
+{
+    string out = "ref: ";
+    if ( tk )
+        out += "tk[" + tk->tree_info() + "], ";
+    else
+        out += "tk=0, ";
+    if ( tj )
+        out += "tj[" + tj->tree_info() + "], ";
+    else
+        out += "tj=0, ";
+    if ( ti )
+        out += "ti[" + ti->tree_info() + "]";
+    else
+        out += "ti=0";
+    return out;
+}
 
 //***************************************************************************//
 //* CNode: status requests                                                  *//
 //***************************************************************************//
 
-//! How many curve parameters are contained in the tree?
+
+//! Returns number of curve parameters used in node and below.
 
 int CNode::npar() const
 {
@@ -194,7 +205,8 @@ int CNode::npar() const
     return np;
 }
 
-//! Does the result depend on k?
+
+//! Does the node depend on k?
 
 bool CNode::k_dependent() const
 {
@@ -208,7 +220,8 @@ bool CNode::k_dependent() const
 //* CNode: low-level tree evaluation                                        *//
 //***************************************************************************//
 
-//! Evaluate tree and convert result to integer, for use as index.
+
+//! Evaluates the node, and sets *ret to the result, rounded for use as index.
 
 void CNode::tree_uival( int *ret, const CContext& ctx ) const
 {
@@ -226,7 +239,8 @@ void CNode::tree_uival( int *ret, const CContext& ctx ) const
 //* CNode: public interface to tree evaluation                              *//
 //***************************************************************************//
 
-//! Evaluate tree. Public API.
+
+//! Evaluates the node, and sets *ret and *dret according to the result.
 
 void CNode::tree_point_val(
     double *ret, double *dret, int k, int j, int i ) const
@@ -242,7 +256,7 @@ void CNode::tree_point_val(
         *dret = val.dr;
 }
 
-//! Evaluate tree. Public API.
+//! Evaluates the node, and sets vectors *ret and *dret according to the result.
 
 void CNode::tree_vec_val(
     vector<double> *ret, vector<double> *dret, int k, int j ) const
diff --git a/pub/lib/expr.hpp b/pub/lib/expr.hpp
index cc2eda35922a72249ba8aa46ccee0efd1631e41e..a1d0a8d7788916f79878973b8efddafe3a9778d8 100644
--- a/pub/lib/expr.hpp
+++ b/pub/lib/expr.hpp
@@ -5,7 +5,7 @@
 //***************************************************************************//
 
 //! \file  expr.hpp
-//! \brief Parse expressions using CRef, CContext, CResult, virtual CNode
+//! \brief Expressions are parsed into CRef, CContext, CResult, virtual CNode
 
 #include <boost/shared_ptr.hpp>
 
@@ -15,16 +15,18 @@ typedef boost::shared_ptr<class CRef>    PRef;
 typedef boost::shared_ptr<class CRegRef> PRgr;
 
 
-//! A Context specifies how a tree shall be evaluated.
+//! The context in which a CNode shall be evaluated.
 
 class CContext {
  public:
-    int k, j, i;                   // file,scan,point we are refering to
-    const vector<double> *vt;       // a vector we may refer to
-    double vt_step;                 // step of equidistant vt, otherwise 0
-    enum TDim { _1, _VI, _VT } dim; // kind of requested output
-    bool want_error;                // errors requested?
-    int nv;                        // number of requested vector elements
+    int k;                         //!< Index of file we are refering to
+    int j;                         //!< Index of scan we are refering to
+    int i;                         //!< Index of point we are refering to
+    const vector<double> *vt;      //!< A vector we may refer to
+    double vt_step;                //!< Step of equidistant vt, otherwise 0
+    enum TDim { _1, _VI, _VT } dim;//!< Kind of requested output
+    bool want_error;               //!< Are errors requested?
+    int nv;                        //!< Number of requested vector elements
 
     CContext( int _k=-1, int _j=-1, int _i=-1 );
 
@@ -35,29 +37,36 @@ class CContext {
 };
 
 
-//! Return value for tree evaluation.
+//! The return-value container for tree evaluation.
 
 class CResult {
  public:
-    bool vectorial;
-    double r;
-    double dr;
-    vector<double> v;
-    vector<double> dv;
+    bool vectorial;    //!< Is it a vector?
+    double r;          //!< Scalar value of result.
+    double dr;         //!< Error of scalar result.
+    vector<double> v;  //!< Resulting vector.
+    vector<double> dv; //!< Errors of vectorial result.
 
+    //! Creates meaningless defaut instance.
     CResult() : vectorial(false), dr(0) {}
 
+    //! Sets scalar result without error.
     void set_r( double _r ) {
         vectorial = false; r = _r; }
+    //! Prepares for vectorial result.
     void preset_v( int n, bool has_dv ) {
         vectorial = true; v.resize(n); dv.resize( has_dv ? n : 0 ); }
+    //! Sets result vector, copying from argument.
     void set_v( const vector<double>& _v ) {
         vectorial = true; v = _v; }
 
+    //! Returns result for given i.
     double to_r( int i ) const {
         return vectorial ? v[i] : r; }
+    //! Returns error of result for given i.
     double to_dr( int i ) const {
         return vectorial ? ( dv.size() ? dv[i] : 0 ) : dr; }
+    //! Is there a nonzero error?
     bool has_err() const {
         return vectorial ? dv.size() : dr; }
 
@@ -65,13 +74,13 @@ class CResult {
 };
 
 
-//! References to data points, indices, ...; used as endpoints of CNode's.
+//! A tuple of nodes that yield indices k,j,i.
 
 class CRef {
  public:
-    PNode tk;
-    PNode tj;
-    PNode ti;
+    PNode tk; //!< A node yielding the workspace index k.
+    PNode tj; //!< A node yielding the spectrum index j.
+    PNode ti; //!< A node yielding the point index i.
 
     CRef( PNode _tk=PNode(), PNode _tj=PNode(), PNode _ti=PNode() ) 
         : tk(_tk), tj(_tj), ti(_ti) {}
@@ -89,12 +98,12 @@ class CNode {
     virtual ~CNode() {}
     virtual void npar_exec( int *np ) const =0;
     //! Recursive: set *kd=true if a subnode is K dependent
-    virtual void kdep_exec( bool *kd ) const {;} // default: do nothing
+    virtual void kdep_exec( bool *kd ) const {;} //!< default: do nothing
 
     int npar() const;
     bool k_dependent() const;
-    virtual bool has_dummy() const =0; // does node depend on t ?
-    virtual bool has_conv() const =0; // does node depend on resolution ?
+    virtual bool has_dummy() const =0; //!< does node depend on t ?
+    virtual bool has_conv() const =0;  //!< does node depend on resolution ?
 
     //! Evaluate tree. Private. User calls pass through API implemented below.
     virtual void tree_val( CResult& ret, const CContext& ctx ) const =0;
@@ -109,6 +118,5 @@ class CNode {
                        int k=-1, int j=-1 ) const;
 
     virtual void set_coord( CCoord& ret, int k=-1 ) const =0;
-    virtual string tree_info() const =0; // introspection, for debugging
+    virtual string tree_info() const =0;  //!< introspection, for debugging
 };
-
diff --git a/pub/lib/file_in.cpp b/pub/lib/file_in.cpp
index 878ad821b6903a0a91e05029c599b47197e2300f..dd93710a7bd8eee7f759b6613f05ab2633d93161 100644
--- a/pub/lib/file_in.cpp
+++ b/pub/lib/file_in.cpp
@@ -26,7 +26,7 @@
 #include "olf.hpp"
 #include "mem.hpp"
 #include "var.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "expr.hpp"
 #include "file_in.hpp"
 
diff --git a/pub/lib/file_out.cpp b/pub/lib/file_out.cpp
index b7b94e45a4ed1d4191b8bc094fd119bafe23fa21..38fa036182c2f418c5d2cf6843df1ed6ca31fd44 100644
--- a/pub/lib/file_out.cpp
+++ b/pub/lib/file_out.cpp
@@ -15,7 +15,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "file_out.hpp"
 
 namespace NFileOut {
diff --git a/pub/lib/fit.cpp b/pub/lib/fit.cpp
index f1d4e498e84bd3097662322d6386b9313bd6758b..1ab32e111d676e2e06b26c543b7369e49ff9a54b 100644
--- a/pub/lib/fit.cpp
+++ b/pub/lib/fit.cpp
@@ -17,7 +17,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "fit.hpp"
 #include "expr.hpp"
 
diff --git a/pub/lib/import.cpp b/pub/lib/import.cpp
index 6f48ba47782702ad81fda98084b70644286a1035..b9f53bb993ee64b55ae77403a3c898b8e1c0ce0b 100644
--- a/pub/lib/import.cpp
+++ b/pub/lib/import.cpp
@@ -18,7 +18,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "import.hpp"
 
 //****************************************************************************//
diff --git a/pub/lib/manip.cpp b/pub/lib/manip.cpp
index e5b2319defa0d5e54300ffb9b39bc4f820580484..e01b931ddef30f22e26d8db4ba6a099b92b5a83b 100644
--- a/pub/lib/manip.cpp
+++ b/pub/lib/manip.cpp
@@ -18,7 +18,7 @@
 #include "olf.hpp"
 #include "mem.hpp"
 #include "jsel.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "expr.hpp" // for sort, symmetrize
 #include "manip.hpp"
 #include "xax_lex.hpp"
@@ -442,7 +442,7 @@ void NManip::ScaSelect( bool sel_del )
                               + " " + JSel.str());
         for ( int j=0; j<fin->nJ(); ++j ) {
             if ( sel_del ^ JSel.contains( j ) ) {
-                fout->V.push_back( fin->new_zentry( j ) );
+                fout->V.push_back( fin->new_slice( j ) );
             }
         }
         ScaRemoveConstantZ( fout );
@@ -596,7 +596,7 @@ void NManip::ScaSpawn()
 
         for ( int jj=0; jj<njj; ++jj ) {
             for ( int j=0; j<fin->nJ(); j++ ) {
-                PZentry eout = fin->new_zentry( j );
+                PSlice eout = fin->new_slice( j );
                 eout->z.insert( eout->z.begin(), jj );
                 fout->V.push_back( eout );
             }
@@ -704,7 +704,7 @@ void NManip::ScaSortByExpr()
 
         vector<size_t> P = triv::sorted_indices( v );
         for (int j=0; j<nj; j++)
-            fout->V.push_back( fin->new_zentry( P[j] ) );
+            fout->V.push_back( fin->new_slice( P[j] ) );
 
         NOlm::mem_store( fout, fiter.k() );
     }
@@ -719,7 +719,7 @@ void NManip::ScaSortByZ()
     while ( POlo fin = fiter() ) {
         POlo fout( fin->new_olo() );
         for (int j=0; j<fin->nJ(); j++)
-            fout->V.push_back( fin->new_zentry( j ) );
+            fout->V.push_back( fin->new_slice( j ) );
         sort( fout->V.begin(), fout->V.end(), CompareZ );
         NOlm::mem_store( fout, fiter.k() );
     }
@@ -784,7 +784,7 @@ void NManip::ZExchange()
         POlo fout( fin->new_olo() );
         fout->lDoc.push_back( com );
         for (int j=0; j<fin->nJ(); j++)
-            fout->V.push_back( fin->new_zentry( j ) );
+            fout->V.push_back( fin->new_slice( j ) );
 
         int nz = fout->ZCo.size();
         if      ( nz<nzmin ) {
@@ -845,7 +845,7 @@ void NManip::ZDelete()
         if ( !fin->nJ() )
             throw "BUG: no spectra";
         for ( int j=0; j<fin->nJ(); j++ )
-            fout->V.push_back( fin->new_zentry( j ) );
+            fout->V.push_back( fin->new_slice( j ) );
 
         CList lis( sel, 0, fin->ZCo.size()-1 );
         lis.sortReverse();
@@ -889,7 +889,7 @@ void NManip::ScaBreak()
             double zval = ftmp->z(j,0);
             fout->RPar.push_back( CParam( zco, zval ) );
             do {
-                PZentry eout( fin->new_zentry(j) );
+                PSlice eout( fin->new_slice(j) );
                 eout->z.erase( eout->z.begin() );
                 fout->V.push_back( eout );
             } while ( ++j<fin->nJ() && fin->z(j,0)==zval );
@@ -1041,7 +1041,7 @@ void NManip::FilMerge( const string& opts )
     fiter.reset();
     while ( fin = fiter() ) {
         for ( int j=0; j<fin->nJ(); j++ ) {
-            PZentry eout( fin->new_zentry(j) );
+            PSlice eout( fin->new_slice(j) );
             auto zinsert=eout->z.begin();
             for ( int i=0; i<nR; ++i )
                 if ( RParDiff[i] )
diff --git a/pub/lib/node.cpp b/pub/lib/node.cpp
index cc3015bdaace46d3c7b07c151970f3b7fe912fba..f394f708aa98a770227d70c40d7f056155bf5461 100644
--- a/pub/lib/node.cpp
+++ b/pub/lib/node.cpp
@@ -13,7 +13,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "reg.hpp"
 #include "func.hpp"
 #include "geni.hpp"
@@ -32,7 +32,7 @@ extern bool allow_slow_conv; // set in curve.cpp
 //* CNodeFun: function/operator node                          
 //******************************************************************************
 
-CNodeFun::CNodeFun( const CFunc* _fun, PNode _a0 )
+CNodeFun::CNodeFun( const class CFunc* _fun, PNode _a0 )
     : fun(_fun), narg(1)
 {
     if ( fun->narg!=1 )
@@ -40,7 +40,7 @@ CNodeFun::CNodeFun( const CFunc* _fun, PNode _a0 )
             S(fun->narg) + " arguments, not 1";
     arg[0] = _a0;
 }
-CNodeFun::CNodeFun( const CFunc* _fun, PNode _a0, PNode _a1 )
+CNodeFun::CNodeFun( const class CFunc* _fun, PNode _a0, PNode _a1 )
     : fun(_fun), narg(2)
 {
     if ( fun->narg!=2 )
@@ -49,7 +49,7 @@ CNodeFun::CNodeFun( const CFunc* _fun, PNode _a0, PNode _a1 )
     arg[0] = _a0;
     arg[1] = _a1;
 }
-CNodeFun::CNodeFun( const CFunc* _fun, PNode _a0, PNode _a1, PNode _a2 )
+CNodeFun::CNodeFun( const class CFunc* _fun, PNode _a0, PNode _a1, PNode _a2 )
     : fun(_fun), narg(3)
 {
     if ( fun->narg!=3 )
diff --git a/pub/lib/olf.cpp b/pub/lib/olf.cpp
index 1b0a04039589492c065a0f5f7dc68caccd79588c..d5dcfe1a8ea9504605c4d2dfc572108271708f05 100644
--- a/pub/lib/olf.cpp
+++ b/pub/lib/olf.cpp
@@ -20,7 +20,7 @@
 
 #include "defs.hpp"
 #include "olf.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "var.hpp"
 #include "expr.hpp"
 #include "xax_lex.hpp"
@@ -52,7 +52,7 @@ string COlo::infoLine( int j ) const
     return out;
 }
 
-//! Return value of iz-th z-variable for zentry j.
+//! Return value of iz-th z-variable for slice j.
 
 double COlo::z( int j, int iz ) const
 {
@@ -65,16 +65,16 @@ double COlo::z( int j, int iz ) const
 
 //! Duplicate spectrum j, and return new shared pointer.
 
-PZentry COld::new_zentry( int j ) const
+PSlice COld::new_slice( int j ) const
 {
-    return PZentry( new CSpec( *(VS(j)) ) );
+    return PSlice( new CSpec( *(VS(j)) ) );
 }
 
 //! Duplicate curve j, and return new shared pointer.
 
-PZentry COlc::new_zentry( int j ) const
+PSlice COlc::new_slice( int j ) const
 {
-    return PZentry( new CCurve( *(VC(j)) ) );
+    return PSlice( new CCurve( *(VC(j)) ) );
 }
 
 //! New shared pointer to copied online file (but without copying main vector).
@@ -112,7 +112,7 @@ void COld::copy_mainvec( POlo fin )
     POld fd = boost::dynamic_pointer_cast<class COld>( fin );
     V.resize( fin->nJ() );
     for( int j=0; j<fin->nJ(); ++j )
-        V[j] = PZentry( new CSpec( *(fd->VS(j)) ) );
+        V[j] = PSlice( new CSpec( *(fd->VS(j)) ) );
 }
 
 //! Set main vector by copying from fin.
@@ -122,7 +122,7 @@ void COlc::copy_mainvec( POlo fin )
     POlc fc = boost::dynamic_pointer_cast<class COlc>( fin );
     V.resize( fin->nJ() );
     for( int j=0; j<fin->nJ(); ++j )
-        V[j] = PZentry( new CCurve( *(fc->VC(j)) ) );
+        V[j] = PSlice( new CCurve( *(fc->VC(j)) ) );
 }
 
 
diff --git a/pub/lib/olf.hpp b/pub/lib/olf.hpp
index dafd8be68201d76684ad939a3eb4bca7c6197198..28dfd9d0231fcf841a99a50652305afe7fc1a8ef 100644
--- a/pub/lib/olf.hpp
+++ b/pub/lib/olf.hpp
@@ -16,7 +16,7 @@
 class COlo {
  public:
     // Data records:
-    vector<PZentry> V;
+    vector<PSlice> V;
     string name;
     vector<string> lDoc;
     CCoord xco, yco;
@@ -39,7 +39,7 @@ class COlo {
     int nJ() const { return V.size(); }
     int nZ() const { return ZCo.size(); }
     double z( int j, int iz ) const;
-    virtual PZentry new_zentry( int j ) const = 0;
+    virtual PSlice new_slice( int j ) const = 0;
     virtual POlo new_olo( bool modified=true ) const = 0;
     virtual CCoord coord( class CVar* var ) const = 0;
     virtual void setCoord( class CVar* var, CCoord& co ) = 0;
@@ -55,7 +55,7 @@ class COld : public COlo {
 
     // Trivially duplicated functions:
     PSpec VS( int j ) const;
-    PZentry new_zentry( int j ) const;
+    PSlice new_slice( int j ) const;
     POlo new_olo( bool modified=true ) const;
     POld new_old( bool modified=true ) const;
     void copy_mainvec( POlo fin );
@@ -103,7 +103,7 @@ class COlc : public COlo {
 
     // Trivially duplicated functions:
     PCurve VC( int j ) const;
-    PZentry new_zentry( int j ) const;
+    PSlice new_slice( int j ) const;
     POlo new_olo( bool modified=true ) const;
     POlc new_olc( bool modified=true ) const;
     void copy_mainvec( POlo fin );
diff --git a/pub/lib/opr.cpp b/pub/lib/opr.cpp
index ef7c5835291d5aa1a391c4c2496e397e478701b5..3ef3e56a500d896c6aa449b52eb72a838e2f8672 100644
--- a/pub/lib/opr.cpp
+++ b/pub/lib/opr.cpp
@@ -16,7 +16,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "reg.hpp"
 #include "var.hpp"
 #include "expr.hpp"
@@ -211,7 +211,7 @@ void NOperate::Pointwise( string llabel )
         } else {
             fout->V.resize( fin->nJ() );
             for( int j=0; j<fin->nJ(); j++ ){
-                fout->V[j] = fin->new_zentry( j );
+                fout->V[j] = fin->new_slice( j );
                 if ( fin->V[j]->frozen )
                     continue;
                 if ( lref.pointwise() ) {
diff --git a/pub/lib/plot.cpp b/pub/lib/plot.cpp
index f86c4c73c779b519eb69661b24c3ada39b5a382f..aeee6122204555f2c29297c984bb703e9aaca598 100644
--- a/pub/lib/plot.cpp
+++ b/pub/lib/plot.cpp
@@ -18,7 +18,7 @@
 #include "olf.hpp"
 #include "mem.hpp"
 #include "jsel.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "dualplot.hpp"
 #include "plot.hpp"
 #include "curve.hpp"
@@ -56,7 +56,7 @@ void determine_Xrange( CPlot* plot, CList* JSel )
     }
     if ( first )
         throw "x range is empty";
-    plot->X.setRoundedLimits( "x", inf, sup );
+    plot->X.setRoundedLimits( inf, sup );
 }
 
 //! Loop over selected files to determine y range for current x range.
@@ -95,7 +95,7 @@ void determine_Yrange( CPlot* plot, CList* JSel )
     }
     if ( inf==INFINITY || sup==-INFINITY )
         throw "y range is empty";
-    plot->Y.setRoundedLimits( "y", inf, sup );
+    plot->Y.setRoundedLimits( inf, sup );
 }
 
 
diff --git a/pub/lib/ptr.hpp b/pub/lib/ptr.hpp
index 96fc0a8d0e89be0a34f6cbea1101849b213d75af..6b74b85cfa7977da0181ab75930d26936d3cf5b0 100644
--- a/pub/lib/ptr.hpp
+++ b/pub/lib/ptr.hpp
@@ -15,7 +15,7 @@ typedef boost::shared_ptr<class COlc>    POlc;
 
 typedef boost::shared_ptr<class CNode>   PNode;
 
-typedef boost::shared_ptr<class CZentry> PZentry;
+typedef boost::shared_ptr<class CSlice>  PSlice;
 typedef boost::shared_ptr<class CSpec>   PSpec;
 typedef boost::shared_ptr<class CCurve>  PCurve;
 
diff --git a/pub/lib/rssm.cpp b/pub/lib/rssm.cpp
index 95f8419abfe3e021ee77c7903d330f71c0db4a87..b8ed145e8e9783f0abd977057a7a65e764874ad7 100644
--- a/pub/lib/rssm.cpp
+++ b/pub/lib/rssm.cpp
@@ -20,7 +20,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "rssm.hpp"
 
 
diff --git a/pub/lib/zentry.cpp b/pub/lib/slice.cpp
similarity index 95%
rename from pub/lib/zentry.cpp
rename to pub/lib/slice.cpp
index 45d2fc976f25777a9f5c589f06768b554a0c8f9f..99a52ae03a25be7b441f2eaf01864d66404da59c 100644
--- a/pub/lib/zentry.cpp
+++ b/pub/lib/slice.cpp
@@ -5,7 +5,7 @@
 //***************************************************************************//
 
 //! \file  zentry.cpp
-//! \brief z-dependent entries CZentry < CCurve, CSpec
+//! \brief z-dependent entries CSlice < CCurve, CSpec
 
 #include <vector>
 #include <string>
@@ -16,20 +16,20 @@
 
 #include "defs.hpp"
 #include "ptr.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 
 
 //***************************************************************************//
-//*  class Zentry                                                           *//
+//*  class Slice                                                           *//
 //***************************************************************************//
 
-CZentry::CZentry() :
+CSlice::CSlice() :
     frozen(false)
 {}
 
-//! Partial copy, to initialize a new Zentry from an existing one.
+//! Partial copy, to initialize a new Slice from an existing one.
 
-void CZentry::copy_z_base( PZentry ein )
+void CSlice::copy_z_base( PSlice ein )
 {
     z = ein->z;
     dz = ein->dz;
@@ -38,7 +38,7 @@ void CZentry::copy_z_base( PZentry ein )
 
 //! Compare z vectors of two zentries, for use within sort routine.
 
-bool CompareZ( const PZentry& E1, const PZentry& E2 )
+bool CompareZ( const PSlice& E1, const PSlice& E2 )
 {
     if( E1->z.size()!=E2->z.size() )
         throw "BUG: inconsistent z.size in CompareZ";
diff --git a/pub/lib/zentry.hpp b/pub/lib/slice.hpp
similarity index 75%
rename from pub/lib/zentry.hpp
rename to pub/lib/slice.hpp
index 59260d533b4385127c4dceae24ccc18564756e0e..6773b588f34e88edd88896e6c9aff080a56e3c4a 100644
--- a/pub/lib/zentry.hpp
+++ b/pub/lib/slice.hpp
@@ -5,26 +5,26 @@
 //***************************************************************************//
 
 //! \file  zentry.hpp
-//! \brief z-dependent entries CZentry < CCurve, CSpec
+//! \brief z-dependent entries CSlice < CCurve, CSpec
 
 //! Virtual base class for CCurve and CSpec, holds a z vector and more.
 
-class CZentry {
+class CSlice {
  public:
     vector<double> z, dz;
     bool frozen;
 
-    CZentry();
-    virtual ~CZentry() {}; // magic: makes dynamic_cast possible
+    CSlice();
+    virtual ~CSlice() {}; // magic: makes dynamic_cast possible
 
-    void copy_z_base( boost::shared_ptr<class CZentry> ein );
+    void copy_z_base( boost::shared_ptr<class CSlice> ein );
     virtual string infoLine() const = 0;
 };
 
 
-//! A CZentry within a curve file, holds parameters and fit outcome.
+//! A CSlice within a curve file, holds parameters and fit outcome.
 
-class CCurve: public CZentry {
+class CCurve: public CSlice {
  public:
     vector<double> P;
     vector<bool>   fixed;
@@ -37,9 +37,9 @@ class CCurve: public CZentry {
 };
 
 
-//! A CZentry within a data file, holds a x-y-dy data set.
+//! A CSlice within a data file, holds a x-y-dy data set.
 
-class CSpec: public CZentry {
+class CSpec: public CSlice {
  public:
     vector<double> x, y, dy;
     
@@ -64,5 +64,5 @@ class CSpec: public CZentry {
 
 //! at global scope, for use in sorting.
 
-bool CompareZ( const PZentry& E1, const PZentry& E2 );
+bool CompareZ( const PSlice& E1, const PSlice& E2 );
 
diff --git a/pub/lib/special.cpp b/pub/lib/special.cpp
index c0847921e51535adede8755a5b8cdc016c9254cb..bfdfec912515b691db713c8f56132ee88c32a985 100644
--- a/pub/lib/special.cpp
+++ b/pub/lib/special.cpp
@@ -16,7 +16,7 @@
 #include "defs.hpp"
 #include "olf.hpp"
 #include "mem.hpp"
-#include "zentry.hpp"
+#include "slice.hpp"
 #include "special.hpp"
 
 namespace NSpecial {