diff --git a/pub/lib/file_in.cpp b/pub/lib/file_in.cpp
index 7dff97331ce2c388df6eb02e4eb03b214aa1a184..7ce1e6078dfa19430e54cf2df84c7feed5273341 100644
--- a/pub/lib/file_in.cpp
+++ b/pub/lib/file_in.cpp
@@ -7,7 +7,6 @@
 //! \file  file_in.cpp
 //! \brief NFileIn: load files.
 
-
 #include <cstdlib>
 #include <cstring>
 #include <iostream>
@@ -15,7 +14,6 @@
 #include <string>
 #include <vector>
 #include <map>
-
 #include <yaml-cpp/yaml.h>
 
 #include <../trivia/string_ops.hpp>
@@ -33,7 +31,7 @@
 #include "file_in.hpp"
 
 using namespace std;
-
+using namespace YAML;
 
 namespace NFileIn {
     void Load_08( ifstream& F_in, string flong );
@@ -42,7 +40,7 @@ namespace NFileIn {
 
 //! Load file in current or legacy format.
 
-void NFileIn::load()
+void NFileIn::load(void)
 {
     string fnames = sask( "Load file(s)" );
     vector<string> vflong; // unix names
@@ -76,10 +74,9 @@ void NFileIn::load()
     }
 }
 
-
 //! Load a YAML file in y08 format.
 
-void NFileIn::Load_08( ifstream& FS, string flong )
+void NFileIn::Load_08(ifstream& FS,string flong)
 {
     string lin, key, val, fdir, fshort, fext, res;
     double num, vx, vy, dy;
@@ -89,30 +86,31 @@ void NFileIn::Load_08( ifstream& FS, string flong )
 
     triv::fname_divide( flong, &fdir, &fshort, &fext);
 
-    YAML::Parser parser(FS);
-    YAML::Node doc;
-    parser.GetNextDocument(doc);
+    const YAML::Node doc = YAML::Load(FS);
+    if( doc.Type() != YAML::NodeType::Map )
+        throw S("document root is not of MAP type");
 
-    // read meta
-    if(!doc.FindValue("Meta"))
+    //read meta
+    if(!doc["Meta"])
         throw S("no Meta");
     try {
         if ( doc["Meta"].Type() != YAML::NodeType::Map &&
              doc["Meta"].size() > 0)
             throw S("Meta is not a MAP type");
-        if(!doc["Meta"].FindValue("format"))
+        if(!doc["Meta"]["format"])
             throw S("no format in Meta");
         string s;
-        doc["Meta"]["format"] >> s;
+        s = doc["Meta"]["format"].as<string>();
         if ( s != "frida/y08 for yaml1" )
             throw S("format is not frida/y08 for yaml1");
-    } catch(YAML::ParserException& e) {
-        std::cout << "no Meta" << e.what() << "\n";
+    } catch(YAML::Exception& e) {
+        std::cerr << "no Meta" << e.what() << "\n";
     }
-    if(!doc["Meta"].FindValue("type"))
+    if(!doc["Meta"]["type"])
         throw S("no type in Meta");
+
     string type;
-    doc["Meta"]["type"] >> type;
+    type=doc["Meta"]["type"].as<string>();
 
     // create output file
     POlo fout;
@@ -130,43 +128,43 @@ void NFileIn::Load_08( ifstream& FS, string flong )
         throw "File "+flong+" has invalid type "+type;
 
     // read history
-    if(!doc.FindValue("History"))
+    if(!doc["History"])
         throw S("no History");
     if ( doc["History"].Type() != YAML::NodeType::Sequence  &&
          doc["History"].size() > 0 )
         throw S("History is not a SEQUENCE type");
     for (int i = 0; i < doc["History"].size(); i++) {
         string str;
-        doc["History"][i] >> str;
+        str=doc["History"][i].as<string>();
         fout->lDoc.push_back(str);
     }
 
     // read coord
-    if(!doc.FindValue("Coord"))
+    if(!doc["Coord"])
         throw S("no Coord");
     if ( doc["Coord"].Type() != YAML::NodeType::Map && doc["Coord"].size() > 0 )
         throw S("Coord is not a MAP type");
-    if( const YAML::Node *pName =  doc["Coord"].FindValue("x") ){
-        (*pName)["name"] >> fout->xco.name;
-        (*pName)["unit"] >> fout->xco.unit;
+    if( const YAML::Node& pName =  doc["Coord"]["x"] ){
+        fout->xco.name = pName["name"].as<string>();
+        fout->xco.unit=pName["unit"].as<string>();
     } else
         throw S("no x coord");
-    if( const YAML::Node *pName =  doc["Coord"].FindValue("y") ){
-        (*pName)["name"] >> fout->yco.name;
-        (*pName)["unit"] >> fout->yco.unit;
+    if( const YAML::Node& pName =  doc["Coord"]["y"] ){
+        fout->yco.name = pName["name"].as<string>();
+        fout->yco.unit= pName["unit"].as<string>();
     } else
         throw S("no y coord");
 
     iz=0;
-    while(const YAML::Node *pName =  doc["Coord"].FindValue("z"+S(iz))){
-        (*pName)["name"] >> co.name;
-        (*pName)["unit"] >> co.unit;
+    while(const YAML::Node& pName =  doc["Coord"]["z"+S(iz)]){
+        co.name=pName["name"].as<string>();
+        co.unit=pName["unit"].as<string>();
         fout->ZCo.push_back( co );
         ++iz;
     }
 
     // read Param
-    if(!doc.FindValue("Param"))
+    if(!doc["Param"])
         throw S("no Param");
     if ( doc["Param"].Type() != YAML::NodeType::Sequence  &&
          doc["Param"].size() > 0)
@@ -174,9 +172,10 @@ void NFileIn::Load_08( ifstream& FS, string flong )
     for( int iParam = 0; iParam < (doc["Param"].size()); iParam++ ){
         if ( doc["Param"][iParam].Type() != YAML::NodeType::Map )
             throw "Param " + S(iParam) + " is not a MAP type";
-        doc["Param"][iParam]["name"] >> co.name;
-        doc["Param"][iParam]["unit"] >> co.unit;
-        doc["Param"][iParam]["value"] >> val;
+
+        co.name=doc["Param"][iParam]["name"].as<string>();
+        co.unit=doc["Param"][iParam]["unit"].as<string>();
+        val=doc["Param"][iParam]["value"].as<string>();
         if( !triv::any2dbl( val, &num ) )
             throw "param(" + co.name + "): invalid value " + val;
         fout->RPar.push_back( CParam( co, num ) );
@@ -184,17 +183,17 @@ void NFileIn::Load_08( ifstream& FS, string flong )
 
     // for curve, read formula
     if( !isdata ) {
-        const YAML::Node *pName = doc.FindValue("Formula");
+        const YAML::Node& pName = doc["Formula"];
         if( !pName )
             throw S("DEFICIENT FILE: no formula");
-        string expr;
-        *pName >> expr;
+        //string expr;
+        string expr=pName.as<string>();
         fc->parse_function( expr );
         fc->curve_set_defaults();
     }
 
     //start to read Tables
-    if(!doc.FindValue("Tables"))
+    if(!doc["Tables"])
         throw S("no Tables");
     if ( doc["Tables"].Type() != YAML::NodeType::Sequence &&
          doc["Tables"].size() > 0 )
@@ -204,7 +203,7 @@ void NFileIn::Load_08( ifstream& FS, string flong )
             throw "Tables " + S(iTable) + " is not a MAP type";
         vector<RObj> z;
         for(iz=0; iz<fout->ZCo.size(); ++iz ){
-            doc["Tables"][iTable]["z" + S(iz)] >> val;
+            val= doc["Tables"][iTable]["z" + S(iz)].as<string>() ;
             if( !triv::any2dbl( val, &num ) )
                 throw "z" + S(iz) + ": invalid value " + val;
             z.push_back( RObjDbl( new CObjDbl( num ) ) );
@@ -213,11 +212,9 @@ void NFileIn::Load_08( ifstream& FS, string flong )
         if( isdata ) {
             PSpec sout( new CSpec );
             sout->z = z;
-            YAML::Iterator itxy=doc["Tables"][iTable].begin();
             string xytag;
-            itxy.first() >> xytag;
-            if        ( xytag == "xy" ) {
-                itxy.second() >> val;
+            if ( doc["Tables"][iTable]["xy"] ) {
+                val=doc["Tables"][iTable]["xy"].as<string>();
                 while( val != "" ) {
                     triv::string_extract_line( val, &lin, &res );
                     if( sscanf( lin.c_str(), "%lg %lg\n", &vx, &vy )!=2 )
@@ -225,8 +222,9 @@ void NFileIn::Load_08( ifstream& FS, string flong )
                     sout->push_xy( vx, vy );
                     val = res;
                 };
-            } else if ( xytag == "xyd" ) {
-                itxy.second() >> val;
+            } else if ( doc["Tables"][iTable]["xyd"] ) {
+                //itxy.second() >> val;
+                val=doc["Tables"][iTable]["xyd"].as<string>();
                 while( val != "" ) {
                     triv::string_extract_line( val, &lin, &res );
                     if( sscanf( lin.c_str(),
@@ -238,11 +236,11 @@ void NFileIn::Load_08( ifstream& FS, string flong )
             } else
                 throw "invalid xytag " + xytag;
             fout->V.push_back( sout );
-        } else {
+            } else {
             PCurve cout( new CCurve );
             cout->z = z;
             for( int ip=0; ip<fc->nP; ++ip ){
-                doc["Tables"][iTable]["p" + S(ip)] >> val;
+                val=doc["Tables"][iTable]["p" + S(ip)].as<string>();
                 if( !triv::any2dbl( val, &num ) )
                     throw "p" + S(ip) + ": invalid value " + val;
                 cout->P.push_back( num );
diff --git a/pub/lib/rssm.cpp b/pub/lib/rssm.cpp
index 40432af3f9ae47ec9f1450ec75ae4b622da9cda8..17cd33fb01d8868ab93eaf322cbde6ffd9129a93 100644
--- a/pub/lib/rssm.cpp
+++ b/pub/lib/rssm.cpp
@@ -43,7 +43,6 @@ class CRawfileSpheres {
 
 //! Read raw data file, store contents as class variables
 
-//void CRawfileSpheres::RdRawYam( FILE *F_in )
 void CRawfileSpheres::RdRawYam( ifstream& F_in )
 {
     string key, val, bla, blub;
@@ -56,21 +55,21 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in )
 
     daq_time_step=0;
 
-    YAML::Parser parser(F_in);
-    YAML::Node doc;
-    const YAML::Node *arr;
-    parser.GetNextDocument(doc);
+    //YAML::Parser parser(F_in);
+    const YAML::Node& doc = YAML::Load(F_in);
+
 
     // read Meta:
-    if(!doc.FindValue("Meta"))
+    if(!doc["Meta"])
         throw S("no Meta");
     try {
         YAML::NodeType::value Metatype = doc["Meta"].Type();
         if ( Metatype != YAML::NodeType::Map && doc["Meta"].size() > 0)
             throw S("DATA BUG: Meta is not a MAP");
-        if(!doc["Meta"].FindValue("format"))
+        if(!doc["Meta"]["format"])
             throw S("DATA BUG: no format in Meta");
-        doc["Meta"]["format"] >> val;
+        string val;
+        val=doc["Meta"]["format"].as<string>();
         if( strncmp( val.c_str(), "acq5.2 for yaml1", 16 ) )
             throw "UNEXPECTED DATA: format: " + val + " instead of acq5.2";
     } catch( exception& e) {
@@ -81,12 +80,12 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in )
 
     // read Shortpar:
     try{
-        if(!doc.FindValue("Shortpar"))
+        if(!doc["Shortpar"])
             throw S("DATA BUG: no Shortpar");
         for(auto it=doc["Shortpar"].begin(); it!=doc["Shortpar"].end(); ++it) {
-            it.first() >> key;
-            it.second() >> val;
-            if      ( key=="incremental" ){
+            key = it->first.as<string>();
+             val=it->second.as<string>();
+             if      ( key=="incremental" ){
                 if      ( val=="true" )
                     incremental = true;
                 else if ( val=="false" )
@@ -115,7 +114,7 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in )
 
     // read EnergyHistograms:
     try {
-        if( !doc.FindValue("EnergyHistograms") )
+        if( !doc["EnergyHistograms"] )
             throw S("DATA BUG: no EnergyHistograms");
         if ( doc["EnergyHistograms"].Type() != YAML::NodeType::Sequence )
             throw S("DATA BUG: EnergyHistograms is not a SEQUENCE");
@@ -124,30 +123,34 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in )
             if ( doc["EnergyHistograms"][iEne].Type() !=
                  YAML::NodeType::Sequence )
                 throw "DATA BUG: EnergyHistogram[" + S(iEne) + "] is not a SEQUENCE";
-            doc["EnergyHistograms"][iEne][0] >> val;
+            val=doc["EnergyHistograms"][iEne][0].as<string>();
             if( !triv::any2dbl( val, &num ) )
                 throw "E-Hist: invalid x-value " + val;
             for( int i=0; i<4; ++i )
                 rawdata[i].push_back( num );
             for( int i=0; i<4; ++i ){ // counts
-                arr = &(doc["EnergyHistograms"][iEne][i+1]);
-                if( arr->Type() != YAML::NodeType::Sequence )
+               // inline Node& Node::operator=(const T& rhs);
+
+                const YAML::Node arr = doc["EnergyHistograms"][iEne][i+1];
+                if( arr.Type() != YAML::NodeType::Sequence )
                     throw "DATA BUG: EnergyHistogram[" + S(iEne) + "][" +
                         S(i+1) + "] is not a SEQUENCE";
                 for( int j=0; j<ndet; ++j ) {
-                    (*arr)[j] >> val;
+                    val=(arr)[j].as<string>();
+                    //(*arr)[j] >> val;
                     if( !triv::any2dbl( val, &num ) )
                         throw "E-Hist: invalid count " + val;
                     rawdata[i].push_back( num );
                 }
             }
             for( int i=0; i<4; ++i ){ // tsteps
-                arr = &(doc["EnergyHistograms"][iEne][i+1+4]);
-                if( arr->Type() != YAML::NodeType::Sequence )
+                const YAML::Node arr = (doc["EnergyHistograms"][iEne][i+1+4]);
+                if( arr.Type() != YAML::NodeType::Sequence )
                     throw "DATA BUG: EnergyHistogram[" + S(iEne) + "][" +
                         S(i+1+4) + "] is not a SEQUENCE";
                 for( int j=0; j<ndet; ++j ) {
-                    (*arr)[j] >> val;
+
+                    val=(arr)[j].as<string>();
                     if( !triv::any2dbl( val, &num ) )
                         throw "E-Hist: invalid tstep " + val;
                     rawdata[i].push_back( num );
@@ -160,7 +163,7 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in )
 
     // read ChopperHistograms:
     try {
-        if(!doc.FindValue("ChopperHistograms"))
+        if(!doc["ChopperHistograms"])
             throw S("no ChopperHistograms");
         if ( doc["ChopperHistograms"].Type() != YAML::NodeType::Sequence )
             throw S("DATA BUG: ChopperHistograms is not a SEQUENCE");
@@ -169,30 +172,30 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in )
             if ( doc["ChopperHistograms"][iCho].Type()
                  != YAML::NodeType::Sequence )
                 throw "DATA BUG: ChopperHistograms " + S(iCho) + " is not a SEQUENCE";
-            doc["ChopperHistograms"][iCho][0] >> val;
+            val=doc["ChopperHistograms"][iCho][0].as<string>();
             if( !triv::any2dbl( val, &num ) )
                 throw "DATA BUG: C-Hist: invalid x-value " + val;
             for( int i=4; i<6; ++i )
                 rawdata[i].push_back( num );
             for( int i=4; i<6; ++i ){                        // 2 cnts lines
-                arr = &(doc["ChopperHistograms"][iCho][i-4+1]);
-                if( arr->Type() != YAML::NodeType::Sequence )
+               const YAML::Node arr = (doc["ChopperHistograms"][iCho][i-4+1]);
+                if( arr.Type() != YAML::NodeType::Sequence )
                     throw "DATA BUG: ChopperHistogram[" + S(iCho) + "][" +
                         S(i-4+1) + "] is not a SEQUENCE";
                 for( int j=0; j<ndet; ++j ) {
-                    (*arr)[j] >> val;
+                    val=(arr)[j].as<string>();
                     if( !triv::any2dbl( val, &num ) )
                         throw "E-Hist: invalid count " + val;
                     rawdata[i].push_back( num );
                 }
             }
             for( int i=4; i<6; ++i ){            // 2 time lines
-                arr = &(doc["ChopperHistograms"][iCho][i-4+1+2]);
-                if( arr->Type() != YAML::NodeType::Sequence )
+                const YAML::Node arr = (doc["ChopperHistograms"][iCho][i-4+1+2]);
+                if( arr.Type() != YAML::NodeType::Sequence )
                     throw "DATA BUG: ChopperHistogram[" + S(iCho) + "][" +
                         S(i-4+1+2) + "] is not a SEQUENCE";
                 for( int j=0; j<ndet; ++j ) {
-                    (*arr)[j] >> val;
+                    val=(arr)[j].as<string>();
                     if( !triv::any2dbl( val, &num ) )
                         throw "E-Hist: invalid count " + val;
                     rawdata[i].push_back( num );