diff --git a/pub/CHANGELOG b/pub/CHANGELOG
index c33169cebdd1d33ee7e5dbdeac4a93b8fe7119e3..2ac31a422e5295302849b7d8b6677449653cb84b 100644
--- a/pub/CHANGELOG
+++ b/pub/CHANGELOG
@@ -1,6 +1,6 @@
 - Use plot.Y.force in 2d plotting
 - Use wx, wy, wh in setting ticks and tacks for easier editing of PS file
-- Correct tacks for small log range
+- Correct ticks and tacks for small log range
 
 Release 2.4.0b of 21apr17:
 
diff --git a/pub/lib/node.hpp b/pub/lib/node.hpp
index 230dcd22ea0f103710f8a193c00b6b67625be645..ff2db06879b7e65756912bf2fe0d77e8f799cee5 100644
--- a/pub/lib/node.hpp
+++ b/pub/lib/node.hpp
@@ -22,6 +22,7 @@ protected:
     vector<RNode> arg;
 
 public:
+    CNodeWithArgs() = delete;
     CNodeWithArgs(int _narg) : narg(_narg) { arg.resize(narg); }
     int npar() const;
     bool k_dependent() const;
@@ -41,6 +42,7 @@ protected:
     const class CFunc* fu;
 
 public:
+    CNodeFun() = delete;
     CNodeFun(int _narg, const class CFunc* _fu) : CNodeWithArgs(_narg), fu(_fu) {}
     RObj tree_val(const CContext& ctx) const;
     virtual CCoord node_coord(int k) const = 0;
@@ -53,6 +55,7 @@ public:
 class CNodeFun1 : public CNodeFun
 {
 public:
+    CNodeFun1() = delete;
     CNodeFun1(const class CFunc* _fu, RNode a0);
     CCoord node_coord(int k) const;
     string tree_info() const;
@@ -64,6 +67,7 @@ public:
 class CNodeFun2 : public CNodeFun
 {
 public:
+    CNodeFun2() = delete;
     CNodeFun2(const class CFunc* _fu, RNode a0, RNode a1);
     CCoord node_coord(int k) const;
     string tree_info() const;
@@ -75,6 +79,7 @@ public:
 class CNodeFun3 : public CNodeFun
 {
 public:
+    CNodeFun3() = delete;
     CNodeFun3(const class CFunc* _fu, RNode a0, RNode a1, RNode a2);
     CCoord node_coord(int k) const;
     string tree_info() const;
@@ -89,6 +94,7 @@ private:
     bool inclusive_end;
 
 public:
+    CNodeRange() = delete;
     CNodeRange(
         bool _inclusive_end, RNode _beg = nullptr, RNode _end = nullptr, RNode _step = nullptr)
         : CNodeWithArgs(3), inclusive_end(_inclusive_end)
@@ -109,6 +115,7 @@ public:
 class CNodeList : public CNodeWithArgs
 {
 public:
+    CNodeList() = delete;
     CNodeList(RNode _list, RNode _incr);
     vector<RNode> args() const { return arg; }
     RObj tree_val(const CContext& ctx) const;
@@ -126,6 +133,7 @@ private:
     const class CGeni* geni;
 
 public:
+    CNodeGeni() = delete;
     CNodeGeni(const class CGeni* _geni, RRef _ref = nullptr);
     CNodeGeni(const class CGeni* _geni, RNode a0);
     CNodeGeni(const class CGeni* _geni, RNode a0, RNode a1);
@@ -145,6 +153,7 @@ private:
     RRef ref;
 
 public:
+    CNodeCvin() = delete;
     CNodeCvin(const class CCvin* _cvin, RRef _ref, RNode a0, RNode a1);
     bool k_dependent() const { return true; }
     RObj tree_val(const CContext& ctx) const;
@@ -161,6 +170,7 @@ private:
     RObj val;
 
 public:
+    CNodeVal() = delete;
     CNodeVal(RObj _val) : val(_val) {}
     CNodeVal(double _val);
     CNodeVal(int _val);
@@ -240,6 +250,7 @@ protected:
     RRef ref;
 
 public:
+    CNodeFile() = delete;
     CNodeFile(RRef _ref) : ref(_ref) {}
     void set_ref(RRef& _ref) { ref = _ref; };
     bool k_dependent() const { return true; }
@@ -255,6 +266,7 @@ public:
 class CNodeFileNJ : public CNodeFile
 {
 public:
+    CNodeFileNJ() = delete;
     CNodeFileNJ(RRef _ref) : CNodeFile(_ref) {}
     string name() const { return "nj"; }
     RObj tree_val_scalar(const CContext& ctx) const;
@@ -269,6 +281,7 @@ private:
     int num;
 
 public:
+    CNodeFileR() = delete;
     CNodeFileR(int _num, RRef _ref) : CNodeFile(_ref), num(_num) {}
     CCoord file_coord(const COlo* f) const;
     string name() const { return "r" + S(num); }
@@ -281,6 +294,7 @@ public:
 class CNodeSlice : public CNodeFile
 {
 public:
+    CNodeSlice() = delete;
     CNodeSlice(RRef _ref) : CNodeFile(_ref) {}
 };
 
@@ -293,6 +307,7 @@ private:
     int num;
 
 public:
+    CNodeSliceZ() = delete;
     CNodeSliceZ(int _num, RRef _ref) : CNodeSlice(_ref), num(_num) {}
     CCoord file_coord(const COlo* f) const;
     string name() const { return "z" + S(num); }
@@ -305,6 +320,7 @@ public:
 class CNodeSpecNI : public CNodeSlice
 {
 public:
+    CNodeSpecNI() = delete;
     CNodeSpecNI(RRef _ref) : CNodeSlice(_ref) {}
     string name() const { return "ni"; }
     RObj tree_val_scalar(const CContext& ctx) const;
@@ -316,6 +332,7 @@ public:
 class CNodeCurve : public CNodeSlice
 {
 public:
+    CNodeCurve() = delete;
     CNodeCurve(RRef _ref) : CNodeSlice(_ref) {}
     RObj tree_val_scalar(const CContext& ctx) const;
     virtual RObj curve_val_scalar(const CCurve* c) const = 0;
@@ -330,6 +347,7 @@ private:
     int num;
 
 public:
+    CNodeCurveP() = delete;
     CNodeCurveP(int _num, RRef _ref) : CNodeCurve(_ref), num(_num) {}
     CCoord file_coord(const COlo* f) const;
     string name() const { return "p" + S(num); }
@@ -343,6 +361,7 @@ public:
 class CNodeCurveOutcome : public CNodeCurve
 {
 public:
+    CNodeCurveOutcome() = delete;
     CNodeCurveOutcome(RRef _ref) : CNodeCurve(_ref) {}
     string name() const { return "oc"; }
     RObj curve_val_scalar(const CCurve* c) const;
@@ -354,6 +373,7 @@ public:
 class CNodeCurveChi2 : public CNodeCurve
 {
 public:
+    CNodeCurveChi2() = delete;
     CNodeCurveChi2(RRef _ref) : CNodeCurve(_ref) {}
     string name() const { return "chi2"; }
     RObj curve_val_scalar(const CCurve* c) const;
@@ -365,6 +385,7 @@ public:
 class CNodeCurveR2 : public CNodeCurve
 {
 public:
+    CNodeCurveR2() = delete;
     CNodeCurveR2(RRef _ref) : CNodeCurve(_ref) {}
     string name() const { return "R2"; }
     RObj curve_val_scalar(const CCurve* c) const;
@@ -394,6 +415,7 @@ public:
 class CNodePointX : public CNodePoint
 {
 public:
+    CNodePointX() = delete;
     CNodePointX(RRef _ref) : CNodePoint(_ref) {}
     CCoord file_coord(const COlo* f) const;
     string name() const { return "x"; }
@@ -407,6 +429,7 @@ public:
 class CNodePointY : public CNodePoint
 {
 public:
+    CNodePointY() = delete;
     CNodePointY(RRef _ref) : CNodePoint(_ref) {}
     CCoord file_coord(const COlo* f) const;
     string name() const { return "y"; }
@@ -420,6 +443,7 @@ public:
 class CNodePointDY : public CNodePoint
 {
 public:
+    CNodePointDY() = delete;
     CNodePointDY(RRef _ref) : CNodePoint(_ref) {}
     CCoord file_coord(const COlo* f) const;
     string name() const { return "dy"; }
@@ -436,6 +460,7 @@ private:
     string idf;
 
 public:
+    CNodeIdf() = delete;
     CNodeIdf(string _s);
     RObj tree_val(const CContext& ctx) const;
     CCoord node_coord(int k) const;
@@ -468,6 +493,7 @@ private:
     RNode arg;
 
 public:
+    CNodeCev() = delete;
     CNodeCev(RRef _ref, RNode _arg) : ref(_ref), arg(_arg) {}
     bool k_dependent() const { return true; }
     bool has_dummy() const { return arg->has_dummy(); }
@@ -486,6 +512,7 @@ protected:
     RNode shift;
 
 public:
+    CNodeMixin() = delete;
     CNodeMixin(const RNode& _shift) : shift(_shift) {}
     int npar() const { return shift->npar(); }
     bool k_dependent() const { return shift->k_dependent(); }
@@ -507,9 +534,9 @@ protected:
     RNode theory;
 
 public:
-    CNodeConvBase(const RNode& _theory, const RNode& _shift) : CNodeMixin(_shift), theory(_theory)
-    {
-    }
+    CNodeConvBase() = delete;
+    CNodeConvBase(const RNode& _theory, const RNode& _shift)
+        : CNodeMixin(_shift), theory(_theory) {}
     int npar() const { return std::max(shift->npar(), theory->npar()); }
     bool k_dependent() const { return theory->k_dependent() || shift->k_dependent(); }
     bool j_dependent() const { return theory->j_dependent() || shift->j_dependent(); }
@@ -524,10 +551,9 @@ public:
 class CNodeConv : public CNodeConvBase
 {
 public:
+    CNodeConv() = delete;
     CNodeConv(const RNode& _theory, const RNode& _shift = RNode(new CNodeVal(0.0)))
-        : CNodeConvBase(_theory, _shift)
-    {
-    }
+        : CNodeConvBase(_theory, _shift) {}
     RObj copy_theory(const CContext& ctx, double theshift) const;
     RObjVecDbl convolve(
         const CContext& ctx, double theshift, const CSpec* sv, double conv_norm,
@@ -544,8 +570,9 @@ public:
 class CNodePConv : public CNodeConvBase
 {
 public:
+    CNodePConv() = delete;
     CNodePConv(const RNode& _theory, const RNode& _shift = RNode(new CNodeVal(0.0)))
-        : CNodeConvBase(_theory, _shift){};
+        : CNodeConvBase(_theory, _shift) {};
     RObj copy_theory(const CContext& ctx, double theshift) const;
     RObjVecDbl convolve(
         const CContext& ctx, double theshift, const CSpec* sv, double conv_norm,