diff --git a/spatio_temporal_dataset/spatial_coordinates/abstract_coordinates.py b/spatio_temporal_dataset/spatial_coordinates/abstract_coordinates.py
index ed6bca63c2df83ec20002f8e0da95e24692841fe..e6cfba0b9eaa8bb3cf61c6cb804f9054f72bf3f0 100644
--- a/spatio_temporal_dataset/spatial_coordinates/abstract_coordinates.py
+++ b/spatio_temporal_dataset/spatial_coordinates/abstract_coordinates.py
@@ -26,12 +26,29 @@ class AbstractSpatialCoordinates(object):
         s_split = df[cls.COORD_SPLIT] if cls.COORD_SPLIT in df.columns else None
         return cls(df_coord=df_coord, s_split=s_split)
 
+    @property
+    def df(self):
+        return self.df_coord if self.s_split is None else self.df_coord.join(self.s_split)
+
     @classmethod
-    def from_csv(cls, csv_path):
+    def from_csv(cls, csv_path=None):
+        assert csv_path is not None
         assert op.exists(csv_path)
         df = pd.read_csv(csv_path)
         return cls.from_df(df)
 
+    @classmethod
+    def from_nb_points(cls, nb_points, **kwargs):
+        # Call the default class method from csv
+        coordinates = cls.from_csv()  # type: AbstractSpatialCoordinates
+        # Sample randomly nb_points coordinates
+        nb_coordinates = len(coordinates)
+        if nb_points > nb_coordinates:
+            raise Exception('Nb coordinates in csv: {} < Nb points desired: {}'.format(nb_coordinates, nb_points))
+        else:
+            df_sample = pd.DataFrame.sample(coordinates.df, n=nb_points)
+            return cls.from_df(df=df_sample)
+
     def coord_x_y_values(self, df_coord: pd.DataFrame) -> np.ndarray:
         return df_coord.loc[:, [self.COORD_X, self.COORD_Y]].values
 
@@ -56,8 +73,7 @@ class AbstractSpatialCoordinates(object):
     def index(self):
         return self.df_coord.index
 
-    @property
-    def nb_points(self):
+    def __len__(self):
         return len(self.df_coord)
 
     def visualization(self):
diff --git a/spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py b/spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py
index 4e8c4a594e3e5fff0f81bc3b815e3d87e1ac868a..fb1335eac9e6ff336d6037607bc532e6d1359631 100644
--- a/spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py
+++ b/spatio_temporal_dataset/spatial_coordinates/alps_station_coordinates.py
@@ -2,10 +2,12 @@ import pandas as pd
 import os.path as op
 
 from spatio_temporal_dataset.spatial_coordinates.abstract_coordinates import AbstractSpatialCoordinates
+from spatio_temporal_dataset.spatial_coordinates.normalized_coordinates import BetweenZeroAndOneNormalization, \
+    NormalizedCoordinates
 from utils import get_full_path
 
 
-class AlpsStationCoordinate(AbstractSpatialCoordinates):
+class AlpsStationCoordinates(AbstractSpatialCoordinates):
     RELATIVE_PATH = r'local/spatio_temporal_datasets/Gilles  - precipitations'
     FULL_PATH = get_full_path(relative_path=RELATIVE_PATH)
 
@@ -31,7 +33,19 @@ class AlpsStationCoordinate(AbstractSpatialCoordinates):
         print(df.index)
 
 
+class AlpsStationCoordinatesBetweenZeroAndOne(AlpsStationCoordinates):
+
+    @classmethod
+    def from_csv(cls, csv_file='coord-lambert2'):
+        coord = super().from_csv(csv_file)
+        return NormalizedCoordinates.from_coordinates(spatial_coordinates=coord,
+                                                      normalizing_function=BetweenZeroAndOneNormalization())
+
+
 if __name__ == '__main__':
     # AlpsStationCoordinate.transform_txt_into_csv()
-    coord = AlpsStationCoordinate.from_csv()
+    # coord = AlpsStationCoordinates.from_csv()
+    # coord = AlpsStationCoordinates.from_nb_points(nb_points=60)
+    # coord = AlpsStationCoordinatesBetweenZeroAndOne.from_csv()
+    coord = AlpsStationCoordinatesBetweenZeroAndOne.from_nb_points(nb_points=60)
     coord.visualization()
diff --git a/spatio_temporal_dataset/spatial_coordinates/generated_coordinates.py b/spatio_temporal_dataset/spatial_coordinates/generated_coordinates.py
index 81cbc1b33e799ce15db1194390da222e664c5021..e49a6add9d5efdf1279ae440858c5caffd7deead 100644
--- a/spatio_temporal_dataset/spatial_coordinates/generated_coordinates.py
+++ b/spatio_temporal_dataset/spatial_coordinates/generated_coordinates.py
@@ -7,20 +7,7 @@ from spatio_temporal_dataset.spatial_coordinates.abstract_coordinates import Abs
 import matplotlib.pyplot as plt
 
 
-class SimulatedCoordinates(AbstractSpatialCoordinates):
-    """
-    Common manipulation on generated coordinates
-    """
-
-    def __init__(self, df_coord, s_split=None):
-        super().__init__(df_coord, s_split)
-
-    @classmethod
-    def from_nb_points(cls, nb_points, **kwargs):
-        pass
-
-
-class CircleCoordinates(SimulatedCoordinates):
+class CircleCoordinates(AbstractSpatialCoordinates):
 
     @classmethod
     def from_nb_points(cls, nb_points, **kwargs):
diff --git a/spatio_temporal_dataset/spatial_coordinates/normalized_coordinates.py b/spatio_temporal_dataset/spatial_coordinates/normalized_coordinates.py
index 1ef1de44e78d5fd68924654d412e9d164a9b4ad8..36608d6fdaee3f27ec1b81eeb918616d2458b95f 100644
--- a/spatio_temporal_dataset/spatial_coordinates/normalized_coordinates.py
+++ b/spatio_temporal_dataset/spatial_coordinates/normalized_coordinates.py
@@ -1,7 +1,5 @@
 import pandas as pd
-
 from spatio_temporal_dataset.spatial_coordinates.abstract_coordinates import AbstractSpatialCoordinates
-from spatio_temporal_dataset.spatial_coordinates.alps_station_coordinates import AlpsStationCoordinate
 
 
 class AbstractNormalizingFunction(object):
@@ -59,8 +57,3 @@ class BetweenZeroAndOneNormalization(UniformNormalization):
         return s_coord_scaled
 
 
-if __name__ == '__main__':
-    coord = AlpsStationCoordinate.from_csv()
-    normalized_coord = NormalizedCoordinates.from_coordinates(spatial_coordinates=coord,
-                                                              normalizing_function=BetweenZeroAndOneNormalization())
-    normalized_coord.visualization()