Index: cpp/frams/model/model.cpp
===================================================================
--- cpp/frams/model/model.cpp	(revision 714)
+++ cpp/frams/model/model.cpp	(revision 720)
@@ -407,5 +407,5 @@
 	SString mod_props;
 	modelparam.select(this);
-	modelparam.save2(mod_props, handle_defaults ? &defaultmodel : NULL, true, !handle_defaults);
+	modelparam.saveSingleLine(mod_props, handle_defaults ? &defaultmodel : NULL, true, !handle_defaults);
 	if (mod_props.len() > 1) //are there any non-default values? ("\n" is empty)
 	{
@@ -419,5 +419,5 @@
 		len = gen.len();
 		gen += "p:";
-		partparam.save2(gen, handle_defaults ? &defaultpart : NULL, true, !handle_defaults);
+		partparam.saveSingleLine(gen, handle_defaults ? &defaultpart : NULL, true, !handle_defaults);
 		if (map)
 			map->add(len, gen.len() - 1, partToMap(i));
@@ -429,5 +429,5 @@
 		jointparam.setParamTab(j->usedelta ? f0_joint_paramtab : f0_nodeltajoint_paramtab);
 		gen += "j:";
-		jointparam.save2(gen, handle_defaults ? &defaultjoint : NULL, true, !handle_defaults);
+		jointparam.saveSingleLine(gen, handle_defaults ? &defaultjoint : NULL, true, !handle_defaults);
 		if (map)
 			map->add(len, gen.len() - 1, jointToMap(i));
@@ -438,5 +438,5 @@
 		len = gen.len();
 		gen += "n:";
-		neuroparam.save2(gen, handle_defaults ? &defaultneuro : NULL, true, !handle_defaults);
+		neuroparam.saveSingleLine(gen, handle_defaults ? &defaultneuro : NULL, true, !handle_defaults);
 		if (map)
 			map->add(len, gen.len() - 1, neuroToMap(i));
@@ -469,5 +469,5 @@
 			len = gen.len();
 			gen += "c:";
-			connparam.save2(gen, handle_defaults ? &defaultconn : NULL, true, !handle_defaults);
+			connparam.saveSingleLine(gen, handle_defaults ? &defaultconn : NULL, true, !handle_defaults);
 			if (map)
 				map->add(len, gen.len() - 1, neuroToMap(n->refno));
@@ -582,6 +582,7 @@
 {
 	error_message = SString::empty();
-	int pos = 0; const char*t = line.c_str();
-	for (; *t; t++, pos++)
+	const char*t = line.c_str();
+	ParamInterface::LoadOptions opts;
+	for (; *t; t++, opts.offset++)
 		if (!strchr(" \r\t", *t)) break;
 	if (*t == '#') return 0;
@@ -592,6 +593,7 @@
 		Part *p = new Part();
 		partparam.select(p);
-		pos += 2;
-		if (partparam.load2(line, pos) & ParamInterface::LOAD2_PARSE_FAILED) { delete p; error_message = "Invalid 'p:'"; return -1; }
+		opts.offset += 2;
+		partparam.load(ParamInterface::FormatSingleLine, line, &opts);
+		if (opts.parse_failed) { delete p; error_message = "Invalid 'p:'"; return -1; }
 		p->o.rotate(p->rot);
 		parts += p;
@@ -604,6 +606,7 @@
 		Param modelparam(f0_model_paramtab);
 		modelparam.select(this);
-		pos += 2;
-		if (modelparam.load2(line, pos) & ParamInterface::LOAD2_PARSE_FAILED) { error_message = "Invalid 'm:'"; return -1; }
+		opts.offset += 2;
+		modelparam.load(ParamInterface::FormatSingleLine, line, &opts);
+		if (opts.parse_failed) { error_message = "Invalid 'm:'"; return -1; }
 		return 0;
 	}
@@ -613,7 +616,8 @@
 		Joint *j = new Joint();
 		jointparam.select(j);
-		pos += 2;
+		opts.offset += 2;
 		j->owner = this;
-		if (jointparam.load2(line, pos) & ParamInterface::LOAD2_PARSE_FAILED) { delete j; error_message = "Invalid 'j:'"; return -1; }
+		jointparam.load(ParamInterface::FormatSingleLine, line, &opts);
+		if (opts.parse_failed) { delete j; error_message = "Invalid 'j:'"; return -1; }
 		bool p1_ok = false, p2_ok = false;
 		if ((p1_ok = ((j->p1_refno >= 0) && (j->p1_refno < getPartCount()))) &&
@@ -642,6 +646,7 @@
 		Neuro *nu = new Neuro();
 		neuroparam.select(nu);
-		pos += 2;
-		if (neuroparam.load2(line, pos) & ParamInterface::LOAD2_PARSE_FAILED) { delete nu; error_message = "Invalid 'n:'"; return -1; }
+		opts.offset += 2;
+		neuroparam.load(ParamInterface::FormatSingleLine, line, &opts);
+		if (opts.parse_failed) { delete nu; error_message = "Invalid 'n:'"; return -1; }
 #ifdef MODEL_V1_COMPATIBLE
 		if (nu->neuro_refno>=0) // parent specified...
@@ -718,6 +723,7 @@
 		NeuroConn c;
 		ncparam.select(&c);
-		pos += 2;
-		if (ncparam.load2(line, pos) & ParamInterface::LOAD2_PARSE_FAILED) { error_message = "Invalid 'c:'"; return -1; }
+		opts.offset += 2;
+		ncparam.load(ParamInterface::FormatSingleLine, line, &opts);
+		if (opts.parse_failed) { error_message = "Invalid 'c:'"; return -1; }
 		bool n1_ok = false, n2_ok = false;
 		if ((n1_ok = ((c.n1_refno >= 0) && (c.n1_refno < getNeuroCount())))
@@ -741,6 +747,7 @@
 		Neuro *nu=new Neuro();
 		neuroitemparam.select(nu);
-		pos+=3;
-		if (neuroitemparam.load2(line,pos) & ParamInterface::LOAD2_PARSE_FAILED) {delete nu; return -1;}
+		opts.offset+=3;
+		neuroitemparam.loadSingleLine(line,opts);
+		if (opts.parse_failed) {delete nu; return -1;}
 		// illegal parent?
 		if ((nu->neuro_refno<0)||(nu->neuro_refno>=old_getNeuroCount()))
