Index: lemon/lp_base.h
===================================================================
--- lemon/lp_base.h	(revision 1875)
+++ lemon/lp_base.h	(revision 1895)
@@ -573,4 +573,6 @@
     virtual void _eraseCol(int col) = 0;
     virtual void _eraseRow(int row) = 0;
+    virtual void _getColName(int col,       std::string & name) = 0;
+    virtual void _setColName(int col, const std::string & name) = 0;
     virtual void _setRowCoeffs(int i, 
 			       int length,
@@ -809,5 +811,5 @@
     ///\todo Option to control whether a constraint with a single variable is
     ///added or not.
-    void setRow(Row r, Value l,const Expr &e, Value u) {
+    void row(Row r, Value l,const Expr &e, Value u) {
       std::vector<int> indices;
       std::vector<Value> values;
@@ -830,6 +832,6 @@
     ///\param r is the row to be modified
     ///\param c is a linear expression (see \ref Constr)
-    void setRow(Row r, const Constr &c) {
-      setRow(r,
+    void row(Row r, const Constr &c) {
+      row(r,
 	     c.lowerBounded()?c.lowerBound():-INF,
 	     c.expr(),
@@ -847,5 +849,5 @@
     Row addRow(Value l,const Expr &e, Value u) {
       Row r=addRow();
-      setRow(r,l,e,u);
+      row(r,l,e,u);
       return r;
     }
@@ -857,5 +859,5 @@
     Row addRow(const Constr &c) {
       Row r=addRow();
-      setRow(r,c);
+      row(r,c);
       return r;
     }
@@ -877,10 +879,29 @@
     }
 
-    ///Set an element of the coefficient matrix of the LP
+    /// Get the name of a column
+    
+    ///\param c is the coresponding coloumn 
+    ///\return The name of the colunm
+    std::string ColName(Col c){
+      std::string name;
+      _getColName(cols.floatingId(c.id), name);
+      return name;
+    }
+    
+    /// Set the name of a column
+    
+    ///\param c is the coresponding coloumn 
+    ///\param name The name to be given
+    void ColName(Col c, const std::string & name){
+      _setColName(cols.floatingId(c.id), name);
+    }
+    
+    /// Set an element of the coefficient matrix of the LP
 
     ///\param r is the row of the element to be modified
     ///\param c is the coloumn of the element to be modified
     ///\param val is the new value of the coefficient
-    void setCoeff(Row r, Col c, Value val){
+
+    void Coeff(Row r, Col c, Value val){
       _setCoeff(rows.floatingId(r.id),cols.floatingId(c.id), val);
     }
@@ -888,5 +909,5 @@
     /// Set the lower bound of a column (i.e a variable)
 
-    /// The upper bound of a variable (column) has to be given by an 
+    /// The lower bound of a variable (column) has to be given by an 
     /// extended number of type Value, i.e. a finite number of type 
     /// Value or -\ref INF.
@@ -894,4 +915,42 @@
       _setColLowerBound(cols.floatingId(c.id),value);
     }
+    
+    ///\brief Set the lower bound of  several columns
+    ///(i.e a variables) at once
+    ///
+    ///This magic function takes a container as its argument
+    ///and applies the function on all of its elements.
+    /// The lower bound of a variable (column) has to be given by an 
+    /// extended number of type Value, i.e. a finite number of type 
+    /// Value or -\ref INF.
+#ifdef DOXYGEN
+    template<class T>
+    void colLowerBound(T &t, Value value) { return 0;} 
+#else
+    template<class T>
+    typename enable_if<typename T::value_type::LpSolverCol,void>::type
+    colLowerBound(T &t, Value value,dummy<0> = 0) {
+      for(typename T::iterator i=t.begin();i!=t.end();++i) {
+	colLowerBound(*i, value);
+      }
+    }
+    template<class T>
+    typename enable_if<typename T::value_type::second_type::LpSolverCol,
+		       void>::type
+    colLowerBound(T &t, Value value,dummy<1> = 1) { 
+      for(typename T::iterator i=t.begin();i!=t.end();++i) {
+	colLowerBound(i->second, value);
+      }
+    }
+    template<class T>
+    typename enable_if<typename T::MapIt::Value::LpSolverCol,
+		       void>::type
+    colLowerBound(T &t, Value value,dummy<2> = 2) { 
+      for(typename T::MapIt i(t); i!=INVALID; ++i){
+	colLowerBound(*i, value);
+      }
+    }
+#endif
+    
     /// Set the upper bound of a column (i.e a variable)
 
@@ -902,4 +961,42 @@
       _setColUpperBound(cols.floatingId(c.id),value);
     };
+
+    ///\brief Set the lower bound of  several columns
+    ///(i.e a variables) at once
+    ///
+    ///This magic function takes a container as its argument
+    ///and applies the function on all of its elements.
+    /// The upper bound of a variable (column) has to be given by an 
+    /// extended number of type Value, i.e. a finite number of type 
+    /// Value or \ref INF.
+#ifdef DOXYGEN
+    template<class T>
+    void colUpperBound(T &t, Value value) { return 0;} 
+#else
+    template<class T>
+    typename enable_if<typename T::value_type::LpSolverCol,void>::type
+    colUpperBound(T &t, Value value,dummy<0> = 0) {
+      for(typename T::iterator i=t.begin();i!=t.end();++i) {
+	colUpperBound(*i, value);
+      }
+    }
+    template<class T>
+    typename enable_if<typename T::value_type::second_type::LpSolverCol,
+		       void>::type
+    colUpperBound(T &t, Value value,dummy<1> = 1) { 
+      for(typename T::iterator i=t.begin();i!=t.end();++i) {
+	colUpperBound(i->second, value);
+      }
+    }
+    template<class T>
+    typename enable_if<typename T::MapIt::Value::LpSolverCol,
+		       void>::type
+    colUpperBound(T &t, Value value,dummy<2> = 2) { 
+      for(typename T::MapIt i(t); i!=INVALID; ++i){
+	colUpperBound(*i, value);
+      }
+    }
+#endif
+
     /// Set the lower and the upper bounds of a column (i.e a variable)
 
@@ -913,4 +1010,42 @@
     }
     
+    ///\brief Set the lower and the upper bound of several columns
+    ///(i.e a variables) at once
+    ///
+    ///This magic function takes a container as its argument
+    ///and applies the function on all of its elements.
+    /// The lower and the upper bounds of
+    /// a variable (column) have to be given by an 
+    /// extended number of type Value, i.e. a finite number of type 
+    /// Value, -\ref INF or \ref INF.
+#ifdef DOXYGEN
+    template<class T>
+    void colBounds(T &t, Value lower, Value upper) { return 0;} 
+#else
+    template<class T>
+    typename enable_if<typename T::value_type::LpSolverCol,void>::type
+    colBounds(T &t, Value lower, Value upper,dummy<0> = 0) {
+      for(typename T::iterator i=t.begin();i!=t.end();++i) {
+	colBounds(*i, lower, upper);
+      }
+    }
+    template<class T>
+    typename enable_if<typename T::value_type::second_type::LpSolverCol,
+		       void>::type
+    colBounds(T &t, Value lower, Value upper,dummy<1> = 1) { 
+      for(typename T::iterator i=t.begin();i!=t.end();++i) {
+	colBounds(i->second, lower, upper);
+      }
+    }
+    template<class T>
+    typename enable_if<typename T::MapIt::Value::LpSolverCol,
+		       void>::type
+    colBounds(T &t, Value lower, Value upper,dummy<2> = 2) { 
+      for(typename T::MapIt i(t); i!=INVALID; ++i){
+	colBounds(*i, lower, upper);
+      }
+    }
+#endif
+    
 //     /// Set the lower bound of a row (i.e a constraint)
 
@@ -946,4 +1081,5 @@
     
     ///\param e is a linear expression of type \ref Expr.
+    ///\bug Is should be called obj()
     void setObj(Expr e) {
       _clearObj();
Index: lemon/lp_cplex.cc
===================================================================
--- lemon/lp_cplex.cc	(revision 1875)
+++ lemon/lp_cplex.cc	(revision 1895)
@@ -81,5 +81,15 @@
     CPXdelrows(env, lp, i, i);
   }
-
+  
+  void LpCplex::_getColName(int col, std::string &name)
+  {
+    ///\bug Unimplemented
+  }
+  
+  void LpCplex::_setColName(int col, const std::string &name)
+  {
+    ///\bug Untested
+    CPXchgcolname(env, lp, 1, &col, const_cast<char*>(name.c_str()));
+  }
   
   ///\warning Data at index 0 is ignored in the arrays.
Index: lemon/lp_cplex.h
===================================================================
--- lemon/lp_cplex.h	(revision 1875)
+++ lemon/lp_cplex.h	(revision 1895)
@@ -58,4 +58,6 @@
     virtual void _eraseCol(int i);
     virtual void _eraseRow(int i);
+    virtual void _getColName(int col,       std::string & name);
+    virtual void _setColName(int col, const std::string & name);
     virtual void _setRowCoeffs(int i, 
 			       int length,
Index: lemon/lp_glpk.cc
===================================================================
--- lemon/lp_glpk.cc	(revision 1875)
+++ lemon/lp_glpk.cc	(revision 1895)
@@ -105,4 +105,17 @@
   }
 
+  void LpGlpk::_getColName(int col, std::string & name)
+  {
+    
+    char *n = lpx_get_col_name(lp,col);
+    name = n?n:"";
+  }
+  
+  
+  void LpGlpk::_setColName(int col, const std::string & name)
+  {
+    lpx_set_col_name(lp,col,const_cast<char*>(name.c_str()));
+  }
+  
   void LpGlpk::_setRowCoeffs(int i, 
 			     int length,
Index: lemon/lp_glpk.h
===================================================================
--- lemon/lp_glpk.h	(revision 1875)
+++ lemon/lp_glpk.h	(revision 1895)
@@ -53,5 +53,6 @@
     virtual void _eraseCol(int i);
     virtual void _eraseRow(int i);
-
+    virtual void _getColName(int col,       std::string & name);
+    virtual void _setColName(int col, const std::string & name);
     virtual void _setRowCoeffs(int i, 
 			       int length,
Index: lemon/lp_skeleton.cc
===================================================================
--- lemon/lp_skeleton.cc	(revision 1875)
+++ lemon/lp_skeleton.cc	(revision 1895)
@@ -49,4 +49,12 @@
   }
 
+  void LpSkeleton::_getColName(int, std::string &) {
+  }
+  
+  
+  void LpSkeleton::_setColName(int, const std::string &) {
+  }
+  
+  
   void LpSkeleton::_setRowCoeffs(int, 
 				 int,
Index: lemon/lp_skeleton.h
===================================================================
--- lemon/lp_skeleton.h	(revision 1875)
+++ lemon/lp_skeleton.h	(revision 1895)
@@ -41,4 +41,9 @@
     /// \e
     virtual void _eraseRow(int i);
+    /// \e
+    virtual void _getColName(int col,       std::string & name);
+    /// \e
+    virtual void _setColName(int col, const std::string & name);
+
     /// \e
 
Index: test/lp_test.cc
===================================================================
--- test/lp_test.cc	(revision 1797)
+++ test/lp_test.cc	(revision 1895)
@@ -28,9 +28,15 @@
   //  for(int i=0;i<10;i++) x.push_back(lp.addCol());
   lp.addColSet(x);
-
+  lp.colLowerBound(x,1);
+  lp.colUpperBound(x,1);
+  lp.colBounds(x,1,2);
 #ifndef GYORSITAS
 
   std::vector<LP::Col> y(10);
   lp.addColSet(y);
+
+  lp.colLowerBound(y,1);
+  lp.colUpperBound(y,1);
+  lp.colBounds(y,1,2);
 
   std::map<int,LP::Col> z;
@@ -40,6 +46,10 @@
   z.insert(std::make_pair(7,INVALID));
   z.insert(std::make_pair(5,INVALID));
-  
+
   lp.addColSet(z);
+
+  lp.colLowerBound(z,1);
+  lp.colUpperBound(z,1);
+  lp.colBounds(z,1,2);
 
   {
