diff --git a/logger/examples/reader_example.py b/logger/examples/reader_example.py
index 038a8ea5039c841007a1f07ec72210f08162a83d..b15446a6cd3d5b159038b56910eede5f571a6d07 100644
--- a/logger/examples/reader_example.py
+++ b/logger/examples/reader_example.py
@@ -51,6 +51,8 @@ print("time: %g" % time)
 
 t = logger.getTimeLimits(basename)
 data = logger.loadSnapshotAtTime(basename, time)
+print("The data contains the following elements:")
+print(data.dtype.names)
 
 pos = data["positions"]
 
diff --git a/logger/logger_python_wrapper.c b/logger/logger_python_wrapper.c
index a422a163f67c7664c057ddd282328a15cd250f9b..ee8042df8e6dc9fb4914c51fbf729149e4e3a6cf 100644
--- a/logger/logger_python_wrapper.c
+++ b/logger/logger_python_wrapper.c
@@ -35,6 +35,7 @@ typedef struct {
 } PyLoggerParticle;
 
 static PyTypeObject PyLoggerParticle_Type;
+const char *particle_name = "Particle";
 
 PyArray_Descr *logger_particle_descr;
 
@@ -89,12 +90,16 @@ static PyObject *loadSnapshotAtTime(__attribute__((unused)) PyObject *self,
   PyArrayObject *out = (PyArrayObject *)PyArray_SimpleNewFromDescr(
       1, &n_tot, logger_particle_descr);
 
+  /* Reference is stolen, therefore need to take it into account */
+  Py_INCREF(logger_particle_descr);
+
+  void *data = PyArray_DATA(out);
   /* Allows to use threads */
   Py_BEGIN_ALLOW_THREADS;
 
   /* Read the particle. */
-  logger_reader_read_all_particles(&reader, time, logger_reader_const,
-                                   PyArray_DATA(out), n_tot);
+  logger_reader_read_all_particles(&reader, time, logger_reader_const, data,
+                                   n_tot);
 
   /* No need of threads anymore */
   Py_END_ALLOW_THREADS;
@@ -129,7 +134,7 @@ static PyObject *getTimeLimits(__attribute__((unused)) PyObject *self,
   struct logger_reader reader;
   logger_reader_init(&reader, basename, verbose);
 
-  if (verbose > 1) message("Reading particles.");
+  if (verbose > 1) message("Reading time limits.");
 
   /* Get the time limits */
   double time_min = logger_reader_get_time_begin(&reader);
@@ -253,6 +258,13 @@ static struct PyModuleDef libloggermodule = {
     PyDict_SetItem(fields, PyUnicode_FromString(name), tuple);            \
   })
 
+void pylogger_particle_define_typeobject(void) {
+
+  PyLoggerParticle_Type.tp_name = particle_name;
+  PyLoggerParticle_Type.tp_print = NULL;
+  PyType_Ready(&PyLoggerParticle_Type);
+}
+
 void pylogger_particle_define_descr(void) {
   /* Generate list of field names */
   PyObject *names = PyTuple_New(9);
@@ -269,14 +281,14 @@ void pylogger_particle_define_descr(void) {
   /* Generate list of fields */
   PyObject *fields = PyDict_New();
   CREATE_FIELD_3D(fields, "positions", pos, NPY_DOUBLE);
-  CREATE_FIELD(fields, "velocities", vel, NPY_FLOAT32);
-  CREATE_FIELD(fields, "accelerations", acc, NPY_FLOAT32);
+  CREATE_FIELD_3D(fields, "velocities", vel, NPY_FLOAT32);
+  CREATE_FIELD_3D(fields, "accelerations", acc, NPY_FLOAT32);
   CREATE_FIELD(fields, "entropies", entropy, NPY_FLOAT32);
-  CREATE_FIELD(fields, "smoothing_lenghts", h, NPY_FLOAT32);
+  CREATE_FIELD(fields, "smoothing_lengths", h, NPY_FLOAT32);
   CREATE_FIELD(fields, "densities", density, NPY_FLOAT32);
   CREATE_FIELD(fields, "masses", mass, NPY_FLOAT32);
-  CREATE_FIELD(fields, "ids", id, NPY_ULONGLONG);
-  CREATE_FIELD(fields, "times", id, NPY_DOUBLE);
+  CREATE_FIELD(fields, "ids", id, NPY_LONGLONG);
+  CREATE_FIELD(fields, "times", time, NPY_DOUBLE);
 
   /* Generate descriptor */
   logger_particle_descr = PyObject_New(PyArray_Descr, &PyArrayDescr_Type);
@@ -284,14 +296,15 @@ void pylogger_particle_define_descr(void) {
   // V if for an arbitrary kind of array
   logger_particle_descr->kind = 'V';
   // Not well documented (seems any value is fine)
-  logger_particle_descr->type = 'p';
+  logger_particle_descr->type = 'v';
   // Native byte ordering
   logger_particle_descr->byteorder = '=';
   // Flags
   logger_particle_descr->flags = NPY_USE_GETITEM | NPY_USE_SETITEM;
   // id of the data type (assigned automatically)
   logger_particle_descr->type_num = 0;
-  // Size of an element
+  // Size of an element (using more size than required in order to log
+  // everything)
   logger_particle_descr->elsize = sizeof(struct logger_particle);
   // alignment (doc magic)
   logger_particle_descr->alignment = offsetof(
@@ -320,6 +333,8 @@ PyMODINIT_FUNC PyInit_liblogger(void) {
   clocks_set_cpufreq(0);
 
   import_array();
+  /* Define the type object */
+  pylogger_particle_define_typeobject();
 
   /* Define the descr of the logger_particle */
   pylogger_particle_define_descr();