diff --git a/pub/src/.deps/curve.Tpo b/pub/src/.deps/curve.Tpo
new file mode 100644
index 0000000000000000000000000000000000000000..94f2aeb8f4465f6674e79341052e4a8c4ea809f3
--- /dev/null
+++ b/pub/src/.deps/curve.Tpo
@@ -0,0 +1,540 @@
+curve.o: curve.cpp /usr/include/c++/4.3/iostream \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/c++config.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/os_defines.h \
+  /usr/include/features.h /usr/include/sys/cdefs.h \
+  /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+  /usr/include/gnu/stubs-32.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/cpu_defines.h \
+  /usr/include/c++/4.3/ostream /usr/include/c++/4.3/ios \
+  /usr/include/c++/4.3/iosfwd /usr/include/c++/4.3/bits/stringfwd.h \
+  /usr/include/c++/4.3/bits/postypes.h /usr/include/c++/4.3/cwchar \
+  /usr/include/c++/4.3/cstddef \
+  /usr/lib/gcc/i486-linux-gnu/4.3.2/include/stddef.h /usr/include/wchar.h \
+  /usr/include/stdio.h /usr/lib/gcc/i486-linux-gnu/4.3.2/include/stdarg.h \
+  /usr/include/bits/wchar.h \
+  /usr/lib/gcc/i486-linux-gnu/4.3.2/include/stddef.h \
+  /usr/include/xlocale.h /usr/include/stdint.h \
+  /usr/include/c++/4.3/exception /usr/include/c++/4.3/bits/char_traits.h \
+  /usr/include/c++/4.3/bits/stl_algobase.h \
+  /usr/include/c++/4.3/bits/functexcept.h \
+  /usr/include/c++/4.3/exception_defines.h \
+  /usr/include/c++/4.3/bits/cpp_type_traits.h \
+  /usr/include/c++/4.3/ext/type_traits.h \
+  /usr/include/c++/4.3/ext/numeric_traits.h \
+  /usr/include/c++/4.3/bits/stl_pair.h \
+  /usr/include/c++/4.3/bits/stl_move.h \
+  /usr/include/c++/4.3/bits/concept_check.h \
+  /usr/include/c++/4.3/bits/stl_iterator_base_types.h \
+  /usr/include/c++/4.3/bits/stl_iterator_base_funcs.h \
+  /usr/include/c++/4.3/bits/stl_iterator.h \
+  /usr/include/c++/4.3/debug/debug.h /usr/include/c++/4.3/cstdio \
+  /usr/include/stdio.h /usr/include/bits/types.h \
+  /usr/include/bits/typesizes.h /usr/include/libio.h \
+  /usr/include/_G_config.h /usr/include/wchar.h \
+  /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+  /usr/include/bits/stdio.h /usr/include/c++/4.3/bits/localefwd.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/c++locale.h \
+  /usr/include/c++/4.3/clocale /usr/include/locale.h \
+  /usr/include/bits/locale.h /usr/include/c++/4.3/cctype \
+  /usr/include/ctype.h /usr/include/endian.h /usr/include/bits/endian.h \
+  /usr/include/c++/4.3/bits/ios_base.h \
+  /usr/include/c++/4.3/ext/atomicity.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/gthr.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/gthr-default.h \
+  /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \
+  /usr/include/bits/sched.h /usr/include/bits/time.h \
+  /usr/include/signal.h /usr/include/bits/sigset.h \
+  /usr/include/bits/pthreadtypes.h /usr/include/bits/setjmp.h \
+  /usr/include/unistd.h /usr/include/bits/posix_opt.h \
+  /usr/include/bits/environments.h /usr/include/bits/confname.h \
+  /usr/include/getopt.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/atomic_word.h \
+  /usr/include/c++/4.3/bits/locale_classes.h /usr/include/c++/4.3/string \
+  /usr/include/c++/4.3/bits/allocator.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/c++allocator.h \
+  /usr/include/c++/4.3/ext/new_allocator.h /usr/include/c++/4.3/new \
+  /usr/include/c++/4.3/bits/ostream_insert.h \
+  /usr/include/c++/4.3/cxxabi-forced.h \
+  /usr/include/c++/4.3/bits/stl_function.h \
+  /usr/include/c++/4.3/backward/binders.h \
+  /usr/include/c++/4.3/bits/basic_string.h \
+  /usr/include/c++/4.3/bits/basic_string.tcc \
+  /usr/include/c++/4.3/bits/locale_classes.tcc \
+  /usr/include/c++/4.3/streambuf /usr/include/c++/4.3/bits/streambuf.tcc \
+  /usr/include/c++/4.3/bits/basic_ios.h \
+  /usr/include/c++/4.3/bits/locale_facets.h /usr/include/c++/4.3/cwctype \
+  /usr/include/wctype.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/ctype_base.h \
+  /usr/include/c++/4.3/bits/streambuf_iterator.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/ctype_inline.h \
+  /usr/include/c++/4.3/bits/locale_facets.tcc \
+  /usr/include/c++/4.3/bits/basic_ios.tcc \
+  /usr/include/c++/4.3/bits/ostream.tcc /usr/include/c++/4.3/istream \
+  /usr/include/c++/4.3/bits/istream.tcc /usr/include/stdlib.h \
+  /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+  /usr/include/sys/types.h /usr/include/sys/select.h \
+  /usr/include/bits/select.h /usr/include/sys/sysmacros.h \
+  /usr/include/alloca.h /usr/include/math.h /usr/include/bits/huge_val.h \
+  /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \
+  /usr/include/bits/inf.h /usr/include/bits/nan.h \
+  /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
+  /usr/include/bits/mathinline.h /usr/local/include/lmmin.h mystd.h \
+  /usr/include/c++/4.3/fstream /usr/include/c++/4.3/bits/codecvt.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/basic_file.h \
+  /usr/include/c++/4.3/i486-linux-gnu/bits/c++io.h \
+  /usr/include/c++/4.3/bits/fstream.tcc /usr/include/c++/4.3/vector \
+  /usr/include/c++/4.3/bits/stl_construct.h \
+  /usr/include/c++/4.3/bits/stl_uninitialized.h \
+  /usr/include/c++/4.3/bits/stl_vector.h \
+  /usr/include/c++/4.3/bits/stl_bvector.h \
+  /usr/include/c++/4.3/bits/vector.tcc olm.h boost/shared_ptr.hpp \
+  /usr/include/boost/config.hpp /usr/include/boost/config/user.hpp \
+  /usr/include/boost/config/select_compiler_config.hpp \
+  /usr/include/boost/config/compiler/gcc.hpp \
+  /usr/include/boost/config/select_stdlib_config.hpp \
+  /usr/include/boost/config/no_tr1/utility.hpp \
+  /usr/include/c++/4.3/utility /usr/include/c++/4.3/bits/stl_relops.h \
+  /usr/include/boost/config/stdlib/libstdcpp3.hpp \
+  /usr/include/boost/config/select_platform_config.hpp \
+  /usr/include/boost/config/platform/linux.hpp \
+  /usr/include/c++/4.3/cstdlib /usr/include/stdlib.h \
+  /usr/include/boost/config/posix_features.hpp \
+  /usr/include/boost/config/suffix.hpp /usr/include/c++/4.3/memory \
+  /usr/include/c++/4.3/bits/stl_tempbuf.h \
+  /usr/include/c++/4.3/bits/stl_raw_storage_iter.h \
+  /usr/include/c++/4.3/backward/auto_ptr.h /usr/include/boost/assert.hpp \
+  /usr/include/assert.h /usr/include/boost/checked_delete.hpp \
+  /usr/include/boost/throw_exception.hpp \
+  /usr/include/boost/detail/shared_count.hpp \
+  /usr/include/boost/detail/bad_weak_ptr.hpp \
+  /usr/include/boost/detail/sp_counted_base.hpp \
+  /usr/include/boost/detail/sp_counted_base_gcc_x86.hpp \
+  /usr/include/c++/4.3/typeinfo \
+  /usr/include/boost/detail/sp_counted_impl.hpp \
+  /usr/include/c++/4.3/functional \
+  /usr/include/boost/detail/workaround.hpp /usr/include/c++/4.3/algorithm \
+  /usr/include/c++/4.3/bits/stl_algo.h \
+  /usr/include/c++/4.3/bits/algorithmfwd.h \
+  /usr/include/c++/4.3/bits/stl_heap.h list.h coord.h scan.h curve.h \
+  func.h expr.h readln.h asi.h xax_lex.h /usr/include/gsl/gsl_errno.h \
+  /usr/include/errno.h /usr/include/bits/errno.h \
+  /usr/include/linux/errno.h /usr/include/asm/errno.h \
+  /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+  /usr/include/gsl/gsl_types.h /usr/include/gsl/gsl_math.h \
+  /usr/include/gsl/gsl_sys.h /usr/include/gsl/gsl_machine.h \
+  /usr/lib/gcc/i486-linux-gnu/4.3.2/include-fixed/limits.h \
+  /usr/lib/gcc/i486-linux-gnu/4.3.2/include-fixed/syslimits.h \
+  /usr/include/limits.h /usr/include/bits/posix1_lim.h \
+  /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+  /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
+  /usr/lib/gcc/i486-linux-gnu/4.3.2/include/float.h \
+  /usr/include/gsl/gsl_precision.h /usr/include/gsl/gsl_nan.h \
+  /usr/include/gsl/gsl_pow_int.h /usr/include/gsl/gsl_roots.h
+
+/usr/include/c++/4.3/iostream:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/c++config.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/os_defines.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/cpu_defines.h:
+
+/usr/include/c++/4.3/ostream:
+
+/usr/include/c++/4.3/ios:
+
+/usr/include/c++/4.3/iosfwd:
+
+/usr/include/c++/4.3/bits/stringfwd.h:
+
+/usr/include/c++/4.3/bits/postypes.h:
+
+/usr/include/c++/4.3/cwchar:
+
+/usr/include/c++/4.3/cstddef:
+
+/usr/lib/gcc/i486-linux-gnu/4.3.2/include/stddef.h:
+
+/usr/include/wchar.h:
+
+/usr/include/stdio.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.3.2/include/stdarg.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.3.2/include/stddef.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/stdint.h:
+
+/usr/include/c++/4.3/exception:
+
+/usr/include/c++/4.3/bits/char_traits.h:
+
+/usr/include/c++/4.3/bits/stl_algobase.h:
+
+/usr/include/c++/4.3/bits/functexcept.h:
+
+/usr/include/c++/4.3/exception_defines.h:
+
+/usr/include/c++/4.3/bits/cpp_type_traits.h:
+
+/usr/include/c++/4.3/ext/type_traits.h:
+
+/usr/include/c++/4.3/ext/numeric_traits.h:
+
+/usr/include/c++/4.3/bits/stl_pair.h:
+
+/usr/include/c++/4.3/bits/stl_move.h:
+
+/usr/include/c++/4.3/bits/concept_check.h:
+
+/usr/include/c++/4.3/bits/stl_iterator_base_types.h:
+
+/usr/include/c++/4.3/bits/stl_iterator_base_funcs.h:
+
+/usr/include/c++/4.3/bits/stl_iterator.h:
+
+/usr/include/c++/4.3/debug/debug.h:
+
+/usr/include/c++/4.3/cstdio:
+
+/usr/include/stdio.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/c++/4.3/bits/localefwd.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/c++locale.h:
+
+/usr/include/c++/4.3/clocale:
+
+/usr/include/locale.h:
+
+/usr/include/bits/locale.h:
+
+/usr/include/c++/4.3/cctype:
+
+/usr/include/ctype.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/c++/4.3/bits/ios_base.h:
+
+/usr/include/c++/4.3/ext/atomicity.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/gthr.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/gthr-default.h:
+
+/usr/include/pthread.h:
+
+/usr/include/sched.h:
+
+/usr/include/time.h:
+
+/usr/include/bits/sched.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/signal.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/bits/setjmp.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/atomic_word.h:
+
+/usr/include/c++/4.3/bits/locale_classes.h:
+
+/usr/include/c++/4.3/string:
+
+/usr/include/c++/4.3/bits/allocator.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/c++allocator.h:
+
+/usr/include/c++/4.3/ext/new_allocator.h:
+
+/usr/include/c++/4.3/new:
+
+/usr/include/c++/4.3/bits/ostream_insert.h:
+
+/usr/include/c++/4.3/cxxabi-forced.h:
+
+/usr/include/c++/4.3/bits/stl_function.h:
+
+/usr/include/c++/4.3/backward/binders.h:
+
+/usr/include/c++/4.3/bits/basic_string.h:
+
+/usr/include/c++/4.3/bits/basic_string.tcc:
+
+/usr/include/c++/4.3/bits/locale_classes.tcc:
+
+/usr/include/c++/4.3/streambuf:
+
+/usr/include/c++/4.3/bits/streambuf.tcc:
+
+/usr/include/c++/4.3/bits/basic_ios.h:
+
+/usr/include/c++/4.3/bits/locale_facets.h:
+
+/usr/include/c++/4.3/cwctype:
+
+/usr/include/wctype.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/ctype_base.h:
+
+/usr/include/c++/4.3/bits/streambuf_iterator.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/ctype_inline.h:
+
+/usr/include/c++/4.3/bits/locale_facets.tcc:
+
+/usr/include/c++/4.3/bits/basic_ios.tcc:
+
+/usr/include/c++/4.3/bits/ostream.tcc:
+
+/usr/include/c++/4.3/istream:
+
+/usr/include/c++/4.3/bits/istream.tcc:
+
+/usr/include/stdlib.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/alloca.h:
+
+/usr/include/math.h:
+
+/usr/include/bits/huge_val.h:
+
+/usr/include/bits/huge_valf.h:
+
+/usr/include/bits/huge_vall.h:
+
+/usr/include/bits/inf.h:
+
+/usr/include/bits/nan.h:
+
+/usr/include/bits/mathdef.h:
+
+/usr/include/bits/mathcalls.h:
+
+/usr/include/bits/mathinline.h:
+
+/usr/local/include/lmmin.h:
+
+mystd.h:
+
+/usr/include/c++/4.3/fstream:
+
+/usr/include/c++/4.3/bits/codecvt.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/basic_file.h:
+
+/usr/include/c++/4.3/i486-linux-gnu/bits/c++io.h:
+
+/usr/include/c++/4.3/bits/fstream.tcc:
+
+/usr/include/c++/4.3/vector:
+
+/usr/include/c++/4.3/bits/stl_construct.h:
+
+/usr/include/c++/4.3/bits/stl_uninitialized.h:
+
+/usr/include/c++/4.3/bits/stl_vector.h:
+
+/usr/include/c++/4.3/bits/stl_bvector.h:
+
+/usr/include/c++/4.3/bits/vector.tcc:
+
+olm.h:
+
+boost/shared_ptr.hpp:
+
+/usr/include/boost/config.hpp:
+
+/usr/include/boost/config/user.hpp:
+
+/usr/include/boost/config/select_compiler_config.hpp:
+
+/usr/include/boost/config/compiler/gcc.hpp:
+
+/usr/include/boost/config/select_stdlib_config.hpp:
+
+/usr/include/boost/config/no_tr1/utility.hpp:
+
+/usr/include/c++/4.3/utility:
+
+/usr/include/c++/4.3/bits/stl_relops.h:
+
+/usr/include/boost/config/stdlib/libstdcpp3.hpp:
+
+/usr/include/boost/config/select_platform_config.hpp:
+
+/usr/include/boost/config/platform/linux.hpp:
+
+/usr/include/c++/4.3/cstdlib:
+
+/usr/include/stdlib.h:
+
+/usr/include/boost/config/posix_features.hpp:
+
+/usr/include/boost/config/suffix.hpp:
+
+/usr/include/c++/4.3/memory:
+
+/usr/include/c++/4.3/bits/stl_tempbuf.h:
+
+/usr/include/c++/4.3/bits/stl_raw_storage_iter.h:
+
+/usr/include/c++/4.3/backward/auto_ptr.h:
+
+/usr/include/boost/assert.hpp:
+
+/usr/include/assert.h:
+
+/usr/include/boost/checked_delete.hpp:
+
+/usr/include/boost/throw_exception.hpp:
+
+/usr/include/boost/detail/shared_count.hpp:
+
+/usr/include/boost/detail/bad_weak_ptr.hpp:
+
+/usr/include/boost/detail/sp_counted_base.hpp:
+
+/usr/include/boost/detail/sp_counted_base_gcc_x86.hpp:
+
+/usr/include/c++/4.3/typeinfo:
+
+/usr/include/boost/detail/sp_counted_impl.hpp:
+
+/usr/include/c++/4.3/functional:
+
+/usr/include/boost/detail/workaround.hpp:
+
+/usr/include/c++/4.3/algorithm:
+
+/usr/include/c++/4.3/bits/stl_algo.h:
+
+/usr/include/c++/4.3/bits/algorithmfwd.h:
+
+/usr/include/c++/4.3/bits/stl_heap.h:
+
+list.h:
+
+coord.h:
+
+scan.h:
+
+curve.h:
+
+func.h:
+
+expr.h:
+
+readln.h:
+
+asi.h:
+
+xax_lex.h:
+
+/usr/include/gsl/gsl_errno.h:
+
+/usr/include/errno.h:
+
+/usr/include/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/gsl/gsl_types.h:
+
+/usr/include/gsl/gsl_math.h:
+
+/usr/include/gsl/gsl_sys.h:
+
+/usr/include/gsl/gsl_machine.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.3.2/include-fixed/limits.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.3.2/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/bits/posix2_lim.h:
+
+/usr/include/bits/xopen_lim.h:
+
+/usr/lib/gcc/i486-linux-gnu/4.3.2/include/float.h:
+
+/usr/include/gsl/gsl_precision.h:
+
+/usr/include/gsl/gsl_nan.h:
+
+/usr/include/gsl/gsl_pow_int.h:
+
+/usr/include/gsl/gsl_roots.h:
diff --git a/pub/src/curve.cpp b/pub/src/curve.cpp
index a6c39e90c390ec690fcfb2697529aa4ae3a0b2a3..6fa443dec6226aaf27e2916dc72ac2dc1db3946b 100644
--- a/pub/src/curve.cpp
+++ b/pub/src/curve.cpp
@@ -134,7 +134,7 @@ void NCurveFile::setFunction( void* _f, const string& expr )
     size_t np = T->npar();
     for( size_t ip=0; ip<np; ip++ ){
         f->PCo.push_back( CCoord("p" + strg(ip), "") );
-        f->Fixed.push_back( 0 );
+        f->Fixed.push_back( CList() );
     }
     f->weight_y_log = false;
     f->cv_intmod = NCurveFile::numint_cvmode;
@@ -175,8 +175,7 @@ vector<string> COlc::pInfo() const
         lin += wrd;
     }
     for ( uint ip=0; ip<nPar(); ip++ ) {
-        snprintf( wrd, PINFO_WRD_SIZ, "p%02d %s        ", ip,
-                  Fixed[ip] ? "fix" : "   " );
+        snprintf( wrd, PINFO_WRD_SIZ, "p%02d             ", ip );
         lin += wrd;
     }
     ret.push_back( lin );
@@ -190,7 +189,8 @@ vector<string> COlc::pInfo() const
             lin += wrd;
         }
         for ( uint ip=0; ip<nPar(); ip++ ) {
-            snprintf( wrd, PINFO_WRD_SIZ, "%-12.7g ", VC[j].P[ip] );
+            snprintf( wrd, PINFO_WRD_SIZ, "%c%-12.7g ",
+                      Fixed[ip].contained(j), VC[j].P[ip] );
             lin += wrd;
         }
         ret.push_back( lin );
@@ -240,9 +240,12 @@ void NCurveFile::OprPar(string llabel)
 
 //! Fix or unfix curve parameters.
 
-void NCurveFile::SetFixed(string how) 
+void NCurveFile::SetFixed()
 {
+    string lin = sask( "Change fix status: { <ip>+ | <ip>- | <ip>=<j-list> }" );
 
+    while( true ) {
+        mystd::string_extract_word( lin, 
     const char *how_opts[] = { "", "+", "-" };
     int ihow;
     for ( ihow=0; ihow<=2; ++ihow )
@@ -378,11 +381,11 @@ void globalEvaluate( double* par, int m_dat, double* fvec,
         mydata = (FitDatTyp*) data;
         COlc *fc = mydata->fc;
         const COld *fd = mydata->fd;
-        CCurve *c = &(fc->VC[ mydata-> j ]);
+        CCurve *c = &(fc->VC[ mydata->j ]);
         
         uint ip = 0;
         for( uint i=0; i<fc->nPar(); ++i )
-            if ( !(fc->Fixed[i]) )
+            if ( !(fc->Fixed[i].contained( mydata->j )) )
                 c->P[i] = par[ip++];
         
         const CScan *s = &(fd->VS[mydata->j]);
@@ -511,15 +514,6 @@ void NCurveFile::Fit( bool _allow_slow_conv )
         data.fd = fd;
 
         uint np = fc->T->npar();
-
-        // determine number of free parameters
-        uint npfree = 0;
-        for ( uint ip=0; ip<np; ++ip )
-            if( !fc->Fixed[ip] )
-                ++npfree;
-        if (npfree<=0)
-            throw string( "function must depend on some free p-parameters" );
-        Par.resize(npfree);
                 
         lm_initialize_control( &control );
         control.epsilon = NFitTune::Epsilon;
@@ -531,9 +525,18 @@ void NCurveFile::Fit( bool _allow_slow_conv )
             printf("%3d", j);
             D = &(fd->VS[j]);
             C = &(fc->VC[j]);
+
+            // determine number of free parameters
+            uint npfree = 0;
+            for ( uint ip=0; ip<np; ++ip )
+                if( !fc->Fixed[ip].contained(j) )
+                    ++npfree;
+            if (npfree<=0)
+                continue;
+            Par.resize(npfree);
             uint ipf=0;
             for ( uint ip=0; ip<np; ip++ ) {
-                if ( !fc->Fixed[ip] )
+                if ( !fc->Fixed[ip].contained(j) )
                     Par[ipf++] = C->P[ip];
             }
                                         
diff --git a/pub/src/curve.h b/pub/src/curve.h
index 9a4ccfbf5dca7975226273038efedaa4ff2a900e..abbdeb8151e1cdd157a5ac590ed8d7453a9b6dce 100644
--- a/pub/src/curve.h
+++ b/pub/src/curve.h
@@ -26,7 +26,7 @@ namespace NCurveFile {
     void ShowPar( void );
     void EditPar( void );
     void OprPar( string llabel );
-    void SetFixed( string how );
+    void SetFixed();
 
     void SetFitTuningPars( string which );
     void Fit( bool _allow_slow_conv );
diff --git a/pub/src/frida2.cpp b/pub/src/frida2.cpp
index 5f494ceaacb0977c574bb72e9d5ce1a49d73a825..9d1985057db5dc168c71624bd93efc1010f42ad7 100644
--- a/pub/src/frida2.cpp
+++ b/pub/src/frida2.cpp
@@ -158,8 +158,8 @@ int main()
                 NCurveFile::Fit( false );
             } else if (cmd == "cfs") {
                 NCurveFile::Fit( true );
-            } else if (cmd.substr(0,2) == "cx") {
-                NCurveFile::SetFixed(cmd.substr(2));
+            } else if (cmd == "cx") {
+                NCurveFile::SetFixed();
             } else if (cmd == "cyli") {
                 NCurveFile::SetProperties("yli");
             } else if (cmd == "cylg") {
diff --git a/pub/src/olm.h b/pub/src/olm.h
index 2825dc1fac820e8cc62c4a16c4beeac33b6ac0fb..be7fa7be9c91f2696408ab208435d29a6a5fbc09 100644
--- a/pub/src/olm.h
+++ b/pub/src/olm.h
@@ -6,7 +6,9 @@
 #include "curve.h"
 #include "func.h"
 
-class COlo { // on-line object (virtual base class for COld, COlc)
+//! Online object: virtual base class for COld, COlc.
+
+class COlo {
  public:
     string name;
     vector<string> lDoc;
@@ -26,7 +28,9 @@ class COlo { // on-line object (virtual base class for COld, COlc)
     inline uint nZ() const { return ZCo.size(); };
 };
 
-class COld : public COlo { // on-line data file
+//! Online data file.
+
+class COld : public COlo {
  public:
     vector<CScan> VS;
 
@@ -46,14 +50,16 @@ class COld : public COlo { // on-line data file
     uint nPts() const; // 0 unless all spectra j have same nPts(j)
 };
 
-class COlc : public COlo { // on-line curves
+//! Online curve file.
+
+class COlc : public COlo { 
  public:
     string expr;
     boost::shared_ptr<class CTree> T;
 	
     uint           kd; // internal number of data file to be fitted
     vector<CCoord> PCo;
-    vector<int>    Fixed; // should be vector<bool>, but trouble with IListV
+    vector<CList>  Fixed;
     vector<CCurve> VC;
     bool           weight_y_log;
     uint           kconv;
@@ -77,7 +83,8 @@ class COlc : public COlo { // on-line curves
     string pInfoCat() const;
 };
 
-// the following is needed to pack (pointers to) COld and COlc into ONE vector :
+//! Element of online memory: pointer to COlo.
+
 class CEle {
     enum eleTyp { DATA, CURVE }; 
     eleTyp Typ;
@@ -142,8 +149,9 @@ class CEle {
     };
 };
 		
-	
-namespace NOlm { // on-line memory
+//! The online memory.
+
+namespace NOlm {
     // the data:
     extern vector<CEle> MOM; // the mother of all on-line data
 
@@ -206,6 +214,8 @@ namespace NOlm { // on-line memory
     };
 };
 
+//! Chunks of frequently used code.
+
 #define OUT_TO_IN( overwrite, fin, ftmp, fout ) \
     if (overwrite) {                            \
         fout = fin;                             \