Index: lemon/lp_base.h
===================================================================
--- lemon/lp_base.h	(revision 2312)
+++ lemon/lp_base.h	(revision 2324)
@@ -704,4 +704,6 @@
     virtual void _setColCoeffs(int i, LpColIterator b, LpColIterator e) = 0;
     virtual void _setCoeff(int row, int col, Value value) = 0;
+    virtual Value _getCoeff(int row, int col) = 0;
+
     virtual void _setColLowerBound(int i, Value value) = 0;
     virtual void _setColUpperBound(int i, Value value) = 0;
@@ -710,4 +712,5 @@
     virtual void _setRowBounds(int i, Value lower, Value upper) = 0;
     virtual void _setObjCoeff(int i, Value obj_coef) = 0;
+    virtual Value _getObjCoeff(int i) = 0;
     virtual void _clearObj()=0;
 
@@ -726,4 +729,7 @@
     virtual void _setMin() = 0;
     
+
+    virtual bool _isMax() = 0;
+
     //Own protected stuff
     
@@ -1001,4 +1007,14 @@
     }
 
+    /// Get an element of the coefficient matrix of the LP
+
+    ///\param r is the row of the element in question
+    ///\param c is the coloumn of the element in question
+    ///\return the corresponding coefficient
+
+    Value coeff(Row r, Col c){
+      return _getCoeff(_lpId(r),_lpId(c));
+    }
+
     /// Set the lower bound of a column (i.e a variable)
 
@@ -1172,6 +1188,10 @@
     ///Set an element of the objective function
     void objCoeff(Col c, Value v) {_setObjCoeff(_lpId(c),v); };
+
+    ///Get an element of the objective function
+    Value objCoeff(Col c) {return _getObjCoeff(_lpId(c)); };
+
     ///Set the objective function
-    
+
     ///\param e is a linear expression of type \ref Expr.
     ///\bug Is should be called obj()
@@ -1188,4 +1208,9 @@
     void min() { _setMin(); }
 
+    ///Query function: is this a maximization problem?
+    bool is_max() {return _isMax(); }
+
+    ///Query function: is this a minimization problem?
+    bool is_min() {return !is_max(); }
     
     ///@}
Index: lemon/lp_glpk.cc
===================================================================
--- lemon/lp_glpk.cc	(revision 2321)
+++ lemon/lp_glpk.cc	(revision 2324)
@@ -214,4 +214,11 @@
   }
 
+  LpGlpk::Value LpGlpk::_getCoeff(int row, int col)
+  {
+    ///\todo This is not yet implemented!!!
+    return 0;
+  }
+
+
   void LpGlpk::_setColLowerBound(int i, Value lo)
   {
@@ -423,4 +430,9 @@
     //i=0 means the constant term (shift)
     lpx_set_obj_coef(lp, i, obj_coef);
+  }
+
+  LpGlpk::Value LpGlpk::_getObjCoeff(int i){
+    //i=0 means the constant term (shift)
+    return lpx_get_obj_coef(lp, i);
   }
 
@@ -552,5 +564,11 @@
   }
 
+  bool LpGlpk::_isMax()
+  {
+    return (lpx_get_obj_dir(lp)==LPX_MAX);
+  }
+
  
+
   void LpGlpk::messageLevel(int m)
   {
Index: lemon/lp_glpk.h
===================================================================
--- lemon/lp_glpk.h	(revision 2321)
+++ lemon/lp_glpk.h	(revision 2324)
@@ -61,4 +61,6 @@
     virtual void _setColCoeffs(int i, LpColIterator b, LpColIterator e);
     virtual void _setCoeff(int row, int col, Value value);
+    virtual Value _getCoeff(int row, int col);
+
     virtual void _setColLowerBound(int i, Value value);
     virtual void _setColUpperBound(int i, Value value);
@@ -67,4 +69,5 @@
     virtual void _setRowBounds(int i, Value lower, Value upper);
     virtual void _setObjCoeff(int i, Value obj_coef);
+    virtual Value _getObjCoeff(int i);
     virtual void _clearObj();
 //     virtual void _setObj(int length,
@@ -91,4 +94,6 @@
     virtual void _setMax();
     virtual void _setMin();
+
+    virtual bool _isMax();
 
   public:
Index: lemon/lp_skeleton.cc
===================================================================
--- lemon/lp_skeleton.cc	(revision 2312)
+++ lemon/lp_skeleton.cc	(revision 2324)
@@ -69,4 +69,9 @@
   }
 
+  LpSkeleton::Value LpSkeleton::_getCoeff(int, int)
+  {
+    return 0;
+  }
+
 
   void LpSkeleton::_setColLowerBound(int, Value)
@@ -94,4 +99,8 @@
   }
 
+  LpSkeleton::Value LpSkeleton::_getObjCoeff(int i){
+    return 0;
+  }
+
   void LpSkeleton::_setMax()
   {
@@ -101,4 +110,10 @@
   {
   }
+
+  bool LpSkeleton::_isMax()
+  {
+    return true;
+  }
+
 
   void LpSkeleton::_clearObj()
Index: lemon/lp_skeleton.h
===================================================================
--- lemon/lp_skeleton.h	(revision 2312)
+++ lemon/lp_skeleton.h	(revision 2324)
@@ -56,4 +56,7 @@
     virtual void _setCoeff(int row, int col, Value value);
 
+    /// Get one element of the coefficient matrix
+    virtual Value _getCoeff(int row, int col);
+
     /// The lower bound of a variable (column) have to be given by an 
     /// extended number of type Value, i.e. a finite number of type 
@@ -91,4 +94,7 @@
     /// \e
     virtual void _setObjCoeff(int i, Value obj_coef);
+
+    /// \e
+    virtual Value _getObjCoeff(int i);
 
     ///\e
@@ -135,4 +141,9 @@
 
     ///\e
+    virtual bool _isMax();
+
+
+
+    ///\e
     virtual bool _isBasicCol(int i);
 
Index: test/lp_test.cc
===================================================================
--- test/lp_test.cc	(revision 2314)
+++ test/lp_test.cc	(revision 2324)
@@ -294,4 +294,11 @@
   lp.max();
 
+
+  //Testing the problem retrieving routines
+  check(lp.objCoeff(x1)==1,"First term should be 1 in the obj function!");
+  check(lp.is_max(),"This is a maximization!");
+  check(lp.coeff(upright,x1)==1,"The coefficient in question is 1!");
+
+
   //Maximization of x1+x2
   //over the triangle with vertices (0,0) (0,1) (1,0)
