Index: src/work/athos/lp/Makefile
===================================================================
--- src/work/athos/lp/Makefile	(revision 1256)
+++ src/work/athos/lp/Makefile	(revision 1263)
@@ -9,7 +9,9 @@
 lp_solver_skeleton.o: lp_solver_skeleton.cc lp_solver_skeleton.h lp_base.h \
 		lin_expr.h
+lp_glpk.o: lp_glpk.cc lp_glpk.h lp_base.h \
+		lin_expr.h
 lp_test.o: lp_test.cc lp_base.h lin_expr.h lp_solver_skeleton.h lp_base.h \
 		lin_expr.h
 
-lp_test: lp_test.o lp_base.o lp_solver_skeleton.o 
-	g++ -o $@ $^
+lp_test: lp_test.o lp_base.o lp_solver_skeleton.o lp_glpk.o
+	g++ -o $@ $^ -lglpk
Index: src/work/athos/lp/lp_base.h
===================================================================
--- src/work/athos/lp/lp_base.h	(revision 1259)
+++ src/work/athos/lp/lp_base.h	(revision 1263)
@@ -101,4 +101,16 @@
   public:
 
+    ///\e
+    enum SolutionType {
+      ///\e
+      INFEASIBLE = 0,
+      ///\e
+      UNBOUNDED = 1,
+      ///\e
+      OPTIMAL = 2,
+      ///\e
+      FEASIBLE = 3,
+    };
+      
     ///The floating point type used by the solver
     typedef double Value;
@@ -161,6 +173,4 @@
     _FixId cols;
 
-    //MATRIX MANIPULATING FUNCTIONS
-
     /// \e
     virtual int _addCol() = 0;
@@ -213,4 +223,15 @@
 
     ///\e
+    
+    ///\bug Wrong interface
+    ///
+    virtual SolutionType _solve() = 0;
+
+    ///\e
+
+    ///\bug Wrong interface
+    ///
+    virtual Value _getSolution(int i) = 0;
+    ///\e
 
     ///\bug unimplemented!!!!
@@ -222,6 +243,11 @@
     virtual ~LpSolverBase() {}
 
+    ///\name Building up and modification of the LP
+
+    ///@{
+
     ///Add a new empty column (i.e a new variable) to the LP
     Col addCol() { Col c; c.id=cols.insert(_addCol()); return c;}
+
     ///\brief Fill the elements of a container with newly created columns
     ///(i.e a new variables)
@@ -262,4 +288,5 @@
     }
 #endif
+
     ///Add a new empty row (i.e a new constaint) to the LP
 
@@ -349,4 +376,25 @@
 	setObjCoeff((*i).first,(*i).second);
     }
+
+    ///@}
+
+
+    ///\name Solving the LP
+
+    ///@{
+
+    ///\e
+    SolutionType solve() { return _solve(); }
+    
+    ///@}
+    
+    ///\name Obtaining the solution LP
+
+    ///@{
+
+    ///\e
+    Value solution(Col c) { return _getSolution(cols.floatingId(c.id)); }
+
+    ///@}
     
   };  
Index: src/work/athos/lp/lp_glpk.cc
===================================================================
--- src/work/athos/lp/lp_glpk.cc	(revision 1261)
+++ src/work/athos/lp/lp_glpk.cc	(revision 1263)
@@ -42,16 +42,20 @@
     void LpGlpk::_setRowCoeffs(int i, 
 			       int length,
-			       int   * indices, 
-			       Value   * values )
-    {
-	lpx_set_mat_row(lp, i, length, indices, values);
+			       const int   * indices, 
+			       const Value   * values )
+    {
+      lpx_set_mat_row(lp, i, length,
+		      const_cast<int * >(indices) ,
+		      const_cast<Value * >(values));
     }
   
     void LpGlpk::_setColCoeffs(int i, 
 			       int length,
-			       int   * indices, 
-			       Value   * values)
-    {
-	lpx_set_mat_col(lp, i, length, indices, values);
+			       const int   * indices, 
+			       const Value   * values)
+    {
+      lpx_set_mat_col(lp, i, length,
+		      const_cast<int * >(indices),
+		      const_cast<Value * >(values));
     }
   
@@ -234,4 +238,17 @@
     }
 
+
+  LpGlpk::SolutionType LpGlpk::_solve()
+  {
+    return OPTIMAL;
+  }
+
+  LpGlpk::Value LpGlpk::_getSolution(int i)
+  {
+    return 0;
+  }
+  
+
+
 } //END OF NAMESPACE LEMON
 
Index: src/work/athos/lp/lp_glpk.h
===================================================================
--- src/work/athos/lp/lp_glpk.h	(revision 1261)
+++ src/work/athos/lp/lp_glpk.h	(revision 1263)
@@ -56,10 +56,10 @@
     virtual void _setRowCoeffs(int i, 
 			       int length,
-                               int   * indices, 
-                               Value   * values );
+                               const int   * indices, 
+                               const Value   * values );
     virtual void _setColCoeffs(int i, 
 			       int length,
-                               int   * indices, 
-                               Value   * values);
+                               const int   * indices, 
+                               const Value   * values);
     virtual void _setColLowerBound(int i, Value value);
     virtual void _setColUpperBound(int i, Value value);
@@ -67,4 +67,14 @@
     virtual void _setRowUpperBound(int i, Value value);
     virtual void _setObjCoeff(int i, Value obj_coef);
+    ///\e
+    
+    ///\bug Unimplemented
+    ///
+    virtual SolutionType _solve();
+    ///\e
+    
+    ///\bug Unimplemented
+    ///
+    virtual Value _getSolution(int i);
 
   };
Index: src/work/athos/lp/lp_solver_skeleton.cc
===================================================================
--- src/work/athos/lp/lp_solver_skeleton.cc	(revision 1254)
+++ src/work/athos/lp/lp_solver_skeleton.cc	(revision 1263)
@@ -65,4 +65,14 @@
   {
   }
+
+  LpSolverSkeleton::SolutionType LpSolverSkeleton::_solve()
+  {
+    return OPTIMAL;
+  }
+
+  LpSolverSkeleton::Value LpSolverSkeleton::_getSolution(int i)
+  {
+    return 0;
+  }
   
 } //namespace lemon
Index: src/work/athos/lp/lp_solver_skeleton.h
===================================================================
--- src/work/athos/lp/lp_solver_skeleton.h	(revision 1254)
+++ src/work/athos/lp/lp_solver_skeleton.h	(revision 1263)
@@ -44,4 +44,7 @@
     virtual void _setRowUpperBound(int i, Value value);
     virtual void _setObjCoeff(int i, Value obj_coef);
+    virtual SolutionType _solve();
+    virtual Value _getSolution(int i);
+
   };  
 
Index: src/work/athos/lp/lp_test.cc
===================================================================
--- src/work/athos/lp/lp_test.cc	(revision 1259)
+++ src/work/athos/lp/lp_test.cc	(revision 1263)
@@ -1,10 +1,10 @@
 #include"lp_solver_skeleton.h"
+#include"lp_glpk.h"
 
 using namespace lemon;
 
-int main()
+void lpTest(LpSolverBase & lp)
 {
-  typedef LpSolverSkeleton LP;
-  LP lp;
+  typedef LpSolverBase LP;
 
   std::vector<LP::Col> x;
@@ -38,2 +38,12 @@
   lp.addRow(LP::INF,3.0*(x[1]+x[2]*2-5*x[3]+12-x[4]/3)+2*x[4]-4,23);
 }
+
+
+int main() 
+{
+  LpSolverSkeleton lp_skel;
+  LpGlpk lp_glpk;
+
+  lpTest(lp_skel);
+  lpTest(lp_glpk);
+}
