diff --git a/python/py_group_manager.cc b/python/py_group_manager.cc
index 86f040107..81b3cff91 100644
--- a/python/py_group_manager.cc
+++ b/python/py_group_manager.cc
@@ -1,74 +1,96 @@
 /* -------------------------------------------------------------------------- */
 #include "py_aka_array.hh"
 /* -------------------------------------------------------------------------- */
 #include <element_group.hh>
 #include <node_group.hh>
 /* -------------------------------------------------------------------------- */
 #include <pybind11/pybind11.h>
 #include <pybind11/stl.h>
 /* -------------------------------------------------------------------------- */
 namespace py = pybind11;
 /* -------------------------------------------------------------------------- */
 
 namespace akantu {
 
 /* -------------------------------------------------------------------------- */
 void register_group_manager(py::module & mod) {
   /* ------------------------------------------------------------------------ */
   py::class_<NodeGroup>(mod, "NodeGroup")
-      .def("getNodes",
-           [](NodeGroup & self) -> decltype(auto) { return self.getNodes(); },
-           py::return_value_policy::reference);
+      .def(
+          "getNodes",
+          [](NodeGroup & self) -> decltype(auto) { return self.getNodes(); },
+          py::return_value_policy::reference)
+      .def("getName", &NodeGroup::getName);
 
   /* ------------------------------------------------------------------------ */
   py::class_<ElementGroup>(mod, "ElementGroup")
-      .def("getNodeGroup",
-           [](ElementGroup & self) -> decltype(auto) {
-             return self.getNodeGroup();
-           },
-           py::return_value_policy::reference);
+      .def(
+          "getNodeGroup",
+          [](ElementGroup & self) -> decltype(auto) {
+            return self.getNodeGroup();
+          },
+          py::return_value_policy::reference)
+      .def("getName", &ElementGroup::getName);
 
   /* ------------------------------------------------------------------------ */
   py::class_<GroupManager>(mod, "GroupManager")
-      .def("getElementGroup",
-           [](GroupManager & self, const std::string & name) -> decltype(auto) {
-             return self.getElementGroup(name);
-           },
-           py::return_value_policy::reference)
+      .def(
+          "getElementGroup",
+          [](GroupManager & self, const std::string & name) -> decltype(auto) {
+            return self.getElementGroup(name);
+          },
+          py::return_value_policy::reference)
       .def("iterateElementGroups",
            [](GroupManager & self) -> decltype(auto) {
              std::vector<std::reference_wrapper<ElementGroup>> groups;
              for (auto & group : self.iterateElementGroups()) {
                groups.emplace_back(group);
              }
              return groups;
            })
       .def("iterateNodeGroups",
            [](GroupManager & self) -> decltype(auto) {
              std::vector<std::reference_wrapper<NodeGroup>> groups;
              for (auto & group : self.iterateNodeGroups()) {
                groups.emplace_back(group);
              }
              return groups;
            })
       .def("createNodeGroup", &GroupManager::createNodeGroup,
            py::return_value_policy::reference)
       .def("createElementGroup",
            py::overload_cast<const std::string &, UInt, bool>(
                &GroupManager::createElementGroup),
            py::return_value_policy::reference)
       .def("createGroupsFromMeshDataUInt",
            &GroupManager::createGroupsFromMeshData<UInt>)
       .def("createElementGroupFromNodeGroup",
            &GroupManager::createElementGroupFromNodeGroup, py::arg("name"),
            py::arg("node_group"), py::arg("dimension") = _all_dimensions)
-      .def("getNodeGroup",
-           [](GroupManager & self, const std::string & name) -> decltype(auto) {
-             return self.getNodeGroup(name);
-           },
-           py::return_value_policy::reference)
+      .def(
+          "getNodeGroup",
+          [](GroupManager & self, const std::string & name) -> decltype(auto) {
+            return self.getNodeGroup(name);
+          },
+          py::return_value_policy::reference)
+      .def("nodeGroups",
+           [](GroupManager & self) {
+             std::vector<NodeGroup*> groups;
+             for (auto & g : self.iterateNodeGroups()) {
+               groups.push_back(&g);
+             }
+             return groups;
+           }, py::return_value_policy::reference)
+      .def("elementGroups",
+           [](GroupManager & self) {
+             std::vector<ElementGroup*> groups;
+             for (auto & g : self.iterateElementGroups()) {
+               groups.push_back(&g);
+             }
+             return groups;
+           }, py::return_value_policy::reference)
       .def("createBoundaryGroupFromGeometry",
            &GroupManager::createBoundaryGroupFromGeometry);
 }
 
 } // namespace akantu
diff --git a/python/py_mesh.cc b/python/py_mesh.cc
index 9724f2aae..fd0a6096f 100644
--- a/python/py_mesh.cc
+++ b/python/py_mesh.cc
@@ -1,60 +1,68 @@
 /* -------------------------------------------------------------------------- */
 #include "aka_config.hh"
 /* -------------------------------------------------------------------------- */
 #include "py_aka_array.hh"
 /* -------------------------------------------------------------------------- */
 #include <mesh.hh>
 #include <mesh_utils.hh>
 /* -------------------------------------------------------------------------- */
 #include <pybind11/pybind11.h>
 /* -------------------------------------------------------------------------- */
 namespace py = pybind11;
 /* -------------------------------------------------------------------------- */
 
 namespace akantu {
 
 /* -------------------------------------------------------------------------- */
 void register_mesh(py::module & mod) {
   py::class_<MeshData>(mod, "MeshData")
       .def(
           "getElementalDataUInt",
           [](MeshData & _this, const ID & name) -> ElementTypeMapArray<UInt> & {
             return _this.getElementalData<UInt>(name);
           },
           py::return_value_policy::reference);
 
   py::class_<Mesh, GroupManager, Dumpable, MeshData>(mod, "Mesh",
                                                      py::multiple_inheritance())
       .def(py::init<UInt, const ID &, const MemoryID &>(),
            py::arg("spatial_dimension"), py::arg("id") = "mesh",
            py::arg("memory_id") = 0)
       .def("read", &Mesh::read, py::arg("filename"),
            py::arg("mesh_io_type") = _miot_auto, "read the mesh from a file")
-      .def("getNodes",
-           [](Mesh & self) -> decltype(auto) { return self.getNodes(); },
-           py::return_value_policy::reference)
+      .def(
+          "getNodes",
+          [](Mesh & self) -> decltype(auto) { return self.getNodes(); },
+          py::return_value_policy::reference)
       .def("getNbNodes", &Mesh::getNbNodes)
+      .def(
+          "getConnectivity",
+          [](Mesh & self, const ElementType & type) -> decltype(auto) {
+            return self.getConnectivity(type);
+          },
+          py::return_value_policy::reference)
       .def("distribute", [](Mesh & self) { self.distribute(); })
-      .def("getNbElement",
-           [](Mesh & self, const UInt spatial_dimension,
-              const GhostType & ghost_type, const ElementKind & kind) {
-             return self.getNbElement(spatial_dimension, ghost_type, kind);
-           },
-           py::arg("spatial_dimension") = _all_dimensions,
-           py::arg("ghost_type") = _not_ghost,
-           py::arg("kind") = _ek_not_defined)
-      .def("getNbElement",
-           [](Mesh & self, const ElementType & type,
-              const GhostType & ghost_type) {
-             return self.getNbElement(type, ghost_type);
-           },
-           py::arg("type"), py::arg("ghost_type") = _not_ghost)
+      .def(
+          "getNbElement",
+          [](Mesh & self, const UInt spatial_dimension,
+             const GhostType & ghost_type, const ElementKind & kind) {
+            return self.getNbElement(spatial_dimension, ghost_type, kind);
+          },
+          py::arg("spatial_dimension") = _all_dimensions,
+          py::arg("ghost_type") = _not_ghost, py::arg("kind") = _ek_not_defined)
+      .def(
+          "getNbElement",
+          [](Mesh & self, const ElementType & type,
+             const GhostType & ghost_type) {
+            return self.getNbElement(type, ghost_type);
+          },
+          py::arg("type"), py::arg("ghost_type") = _not_ghost)
       .def_static("getSpatialDimension", [](ElementType & type) {
         return Mesh::getSpatialDimension(type);
       });
 
   /* ------------------------------------------------------------------------ */
   py::class_<MeshUtils>(mod, "MeshUtils")
       .def_static("buildFacets", &MeshUtils::buildFacets);
 }
 } // namespace akantu