diff --git a/pub/CHANGELOG b/pub/CHANGELOG
index f3bad889cd76f7a86a1578be468ccae64b71f028..21e01340237e32ea66107b37d9ec13c8d9a3ee3b 100644
--- a/pub/CHANGELOG
+++ b/pub/CHANGELOG
@@ -2,7 +2,7 @@ Release 2.1.3a
 
 - interface changes:
   - command modifier "=" (overwrite) must now be appended
-  - calculator mode no longer separate: FRIDA _is_ a pocket calculator
+  - calculator mode merged with main menu: FRIDA _is_ now a pocket calculator
 
 Release 2.1.2a of 20feb11:
 
diff --git a/pub/src/calc.cpp b/pub/src/calc.cpp
index 5ed40c8daec7314b70a97cfbf6d0e1d78da5a950..231fd0d05a7b5540b59f321fbef5ab446d9e6e14 100644
--- a/pub/src/calc.cpp
+++ b/pub/src/calc.cpp
@@ -30,7 +30,7 @@ void NCalc::Calculator( string s )
 
     user_xaxparse( s.c_str(), &T );
     NOlm::IterateO fiter;
-    if( fiter.size()==0 ) {
+    if( fiter.size()==0 || !T->k_dependent() ) {
         T->tree_point_val( &ret, &dret );
         printf("%.12g", ret);
         if( dret )
diff --git a/pub/src/edif.cpp b/pub/src/edif.cpp
index 9896a9048e5daed35e144eaef313ca31b1f24877..05435a0d4c53f91656183bffcee9ced8e04399f1 100644
--- a/pub/src/edif.cpp
+++ b/pub/src/edif.cpp
@@ -858,7 +858,7 @@ void NEdif::MakeGrid()
 
         S->x.resize(ni);
         for( uint i=0; i<ni; ++i )
-            S->x[i] = ((double)i)/(ni+1);
+            S->x[i] = ((double)i)/ni;
         S->y.clear();
         S->y.resize( ni, 0. );
 
diff --git a/pub/src/expr.cpp b/pub/src/expr.cpp
index 7a367a633343690d03280b0df309bbc1d0b3754c..6cb6770b9331f4e4c6e5ad8c9a9cb7cee1f24d6b 100644
--- a/pub/src/expr.cpp
+++ b/pub/src/expr.cpp
@@ -465,6 +465,32 @@ void CTree::npar_exec( uint *np ) const
 }
 
 
+//! Does the result depend on k?
+
+bool CTree::k_dependent() const
+{
+    bool kd=false;
+    kdep_exec( &kd );
+    return kd;
+}
+
+
+//! Implementation with pointer argument to allow recursion.
+
+void CTree::kdep_exec( bool *kd ) const
+{
+    if      ( typ == _OP || typ == _CONV || typ == _DIRAC )
+        for ( uint iarg=0; iarg<narg; ++iarg )
+            arg[iarg]->kdep_exec( kd );
+    else if ( typ == _VAL || typ == _DUMMY || typ == _CEV )
+        ; // do nothing
+    else if ( typ == _REF ) {
+        *kd = true;
+    } else
+        throw string( "BUG: kdep(UNDEF)" );
+}
+
+
 //! Does expression contain dummy argument t ?
 
 bool CTree::has_dummy() const
diff --git a/pub/src/expr.h b/pub/src/expr.h
index 885aa2132dae23ca64a3d7159c064721c3a5cc7a..fd93c0626809821e77a94bfcf3c94059292715aa 100644
--- a/pub/src/expr.h
+++ b/pub/src/expr.h
@@ -108,6 +108,7 @@ class CTree {
     static void setConv( uint& kconv, uint& jconv, uint k, uint j );
 
     uint npar() const;
+    bool k_dependent() const;
     bool has_dummy() const;
 
     void tree_val  ( CResult& ret, const CContext& ctx ) const;
@@ -125,4 +126,5 @@ class CTree {
 
  private:
     void npar_exec( uint *np ) const;
+    void kdep_exec( bool *kd ) const;
 };