diff --git a/.gitignore b/.gitignore
index c6c5a741fc7899972605e0fff68b0ad42f8d5673..63d627dd6d736309587738385f7ca037d16ad0ea 100755
--- a/.gitignore
+++ b/.gitignore
@@ -60,3 +60,9 @@ data/l8_20130707\.tif\.aux\.xml
 data/l8_20130831\.tif\.aux\.xml
 
 qgis-auth\.db
+
+ymraster/\.spyderproject
+
+\.spyderworkspace
+
+\.spyderproject
diff --git a/ymraster/ymraster.py b/ymraster/ymraster.py
index f8f6889343e72ded09b88b25044fa66063fa7981..0114d7f72678771ea2644d91aceee35d3dcf897e 100755
--- a/ymraster/ymraster.py
+++ b/ymraster/ymraster.py
@@ -163,6 +163,8 @@ def write_file(out_filename, array=None, overwrite=True,
         projection to write in the output file metadata.
     transform : 6-tuple of floats
         Geo-transformation to use for the output file.
+    band_info : list of string:
+        Info of each band to write in the output file metadata
     """
     # Size & data type of output image
     xsize, ysize = (kw['width'], kw['height']) \
@@ -194,7 +196,8 @@ def write_file(out_filename, array=None, overwrite=True,
     # Set metadata
     if kw.get('date_time'):
         out_ds.SetMetadata(
-            {'TIFFTAG_DATETIME': kw['date_time'].strftime('%Y:%m:%d %H:%M:%S')})
+            {'TIFFTAG_DATETIME':
+             kw['date_time'].strftime('%Y:%m:%d %H:%M:%S')})
     if kw.get('srs'):
         out_ds.SetProjection(kw['srs'].ExportToWkt())
     if kw.get('transform'):
@@ -209,6 +212,10 @@ def write_file(out_filename, array=None, overwrite=True,
         band.WriteArray(array, xoff=xoffset, yoff=yoffset)
         if kw.get('nodata_value'):
             band.SetNoDataValue(kw.get('nodata_value'))
+        if kw.get('band_info'):
+            metadata = band.GetMetadata()
+            metadata['band_info'] = kw.get('band_info')[0]
+            band.SetMetadata(metadata)
         band.FlushCache()
     else:
         for i in range(number_bands):
@@ -216,6 +223,10 @@ def write_file(out_filename, array=None, overwrite=True,
             band.WriteArray(array[:, :, i], xoff=xoffset, yoff=yoffset)
             if kw.get('nodata_value'):
                 band.SetNoDataValue(kw.get('nodata_value'))
+            if kw.get('band_info'):
+                metadata = band.GetMetadata()
+                metadata['band_info'] = kw.get('band_info')[i]
+                band.SetMetadata(metadata)
             band.FlushCache()
     band = None
     out_ds = None
@@ -660,6 +671,76 @@ class Raster(Sized):
         # Close file
         ds = None
 
+    def write_metadata(self, metadata):
+        """
+        Write metada in the file
+
+        Parameters
+        ----------
+        metadata : dictionnary
+            Key are Tag of the metadata, values is the corresponding
+            description
+
+        Limitations
+        -----------
+        Works for Tif files only.
+
+        """
+        ds = gdal.Open(self._filename, gdal.GA_Update)
+
+        metadata_orign = ds.GetMetadata()
+        metadata_orign.update(metadata)
+        ds.SetMetadata(metadata_orign)
+        ds = None
+        self.refresh()
+
+
+    def write_band_metadata(self, idx, metadata):
+        """
+        Write band metada in the file
+
+        Parameters
+        ----------
+        idx : int
+            Band number. Indexation starts at 1.
+        metadata : dictionnary
+            Key are Tag of the metadata, values is the corresponding
+            description
+
+        Limitations
+        -----------
+        Works for Tif files only.
+
+        """
+        ds = gdal.Open(self._filename, gdal.GA_Update)
+        band = ds.GetRasterBand(idx)
+        metadata_orign = band.GetMetadata()
+        metadata_orign.update(metadata)
+        band.SetMetadata(metadata)
+        ds = None
+        self.refresh()
+
+    def get_band_metadata(self, idx):
+        """
+        Get band metada in the file
+
+        Parameters
+        ----------
+        idx : int
+            Band number. Indexation starts at 1.
+
+        Returns
+        -------
+        metadata : dictionnary
+            Key are Tag of the metadata, values is the corresponding
+            description
+        """
+        ds = gdal.Open(self._filename, gdal.GA_Update)
+        band = ds.GetRasterBand(idx)
+        metadata = band.GetMetadata()
+        ds = None
+        return metadata
+
     @otb_function
     def change_dtype(self, out_dtype, out_filename):
         """
@@ -1597,7 +1678,7 @@ class Raster(Sized):
         masked_bands = [Raster(os.path.join(gettempdir(),
                                             'mono_masked_{}.tif'.format(i)))
                         for i in range(self._count)]
-        concatenate_rasters(*masked_bands, out_filename=out_filename)
+        concatenate_rasters(masked_bands, out_filename=out_filename)
         out_raster = Raster(out_filename)
         out_raster.nodata_value = set_value
         print set_value