diff --git a/DESCRIPTION b/DESCRIPTION
index 67ff791b96dd56883d48b739128cd8ed9aa9013d..308b4a040d8850be5bc31bf97c122d0d026a2f68 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,8 +1,8 @@
 Package: airGRteaching
 Type: Package
 Title: Tools to Simplify the Use of the airGR Hydrological Package for Education (Including a Shiny Interface)
-Version: 0.1.5.20
-Date: 2017-09-13
+Version: 0.1.5.21
+Date: 2017-09-14
 Authors@R: c(person("Olivier", "Delaigue", role = c("aut", "cre"), email = "airGR@irstea.fr"), person("Laurent", "Coron", role = c("aut")), person("Pierre", "Brigode", role = c("aut")), person("Guillaume", "Thirel", role = c("ctb")))
 Depends: airGR (>= 1.0.9.43)
 Imports: xts, dygraphs (>= 1.1.1.4), shiny, plotrix, markdown
diff --git a/inst/ShinyGR/server.R b/inst/ShinyGR/server.R
index 8e2acb2e47457753d02cbeb0e89b593080f32ee8..138a706d04aea0981bf566c1cfb3018bd76e0196 100644
--- a/inst/ShinyGR/server.R
+++ b/inst/ShinyGR/server.R
@@ -41,7 +41,7 @@ shinyServer(function(input, output, session) {
     CAL     <- CalGR(ObsGR = getPrep()$OBS, CalCrit = CAL_opt$Crit, transfo = CAL_opt$Transfo,
                      WupPer = .ShinyGR.args$WupPer, CalPer = substr(c(input$Period[1], input$Period[2]), 1, 10), verbose = FALSE)
     PARAM   <- CAL$OutputsCalib$ParamFinalR
-    
+
     updateSliderInput(session, inputId = "X1", value = PARAM[1L])
     updateSliderInput(session, inputId = "X2", value = PARAM[2L])
     updateSliderInput(session, inputId = "X3", value = PARAM[3L])
@@ -102,7 +102,7 @@ shinyServer(function(input, output, session) {
       return(SIM_transfo)
     })
     names(SIM) <- SIM_opt$Crit
-    
+
     ## Criteria computation
     CRIT <- lapply(SIM, function(iCRIT) {
       lapply(SIM_opt$Transfo, function(iTRSF) {
@@ -137,10 +137,10 @@ shinyServer(function(input, output, session) {
   observe({
   if (getPlotType() == 4) {
       updateSelectInput(session, inputId = "HydroModel", choice = c("GR4J", "GR5J"), selected = input$HydroModel)
-      updateSelectInput(session, inputId = "SnowModel", choice = c("None"))
+      updateSelectInput(session, inputId = "SnowModel" , choice = c("None"))
   } else {
       updateSelectInput(session, inputId = "HydroModel", choice = c("GR4J", "GR5J", "GR6J"), selected = input$HydroModel)
-      updateSelectInput(session, inputId = "SnowModel", choice = c("None", "CemaNeige")   , selected = input$SnowModel)
+      updateSelectInput(session, inputId = "SnowModel" , choice = c("None", "CemaNeige")   , selected = input$SnowModel)
     }
   })
   
@@ -241,7 +241,7 @@ shinyServer(function(input, output, session) {
       par(oma = c(20, 0, 0, 0))
     }
     plot(OutputsModel, Qobs = getRES()$SIM$Qobs, IndPeriod_Plot = IndPlot, cex.lab = 1.2, cex.axis = 1.4, cex.leg = 1.4)
-  })
+  }, bg = "transparent")
   
   
   ## Plot flow time series
@@ -375,7 +375,7 @@ shinyServer(function(input, output, session) {
     airGRteaching:::DiagramGR(OutputsModel = OutputsModel2, Param = getRES()$PARAM,
                               SimPer = input$Period, EventDate = input$Event,
                               HydroModel = input$HydroModel)
-  })
+  }, bg = "transparent")
   
   
   
@@ -385,7 +385,7 @@ shinyServer(function(input, output, session) {
     
     ## Table created in order to choose order the criteria in the table output
     tabCrit_gauge <- data.frame(Criterion = c("NSE [Q]", "NSE [sqrt(Q)]", "NSE [log(Q)]",
-                                             "KGE [Q]", "KGE [sqrt(Q)]", "KGE [log(Q)]"),
+                                              "KGE [Q]", "KGE [sqrt(Q)]", "KGE [log(Q)]"),
                                 ID        = 1:6, stringsAsFactors = FALSE)
     
     tabCrit_out <- merge(tabCrit_gauge, getRES()$Crit, by = "Criterion", all.x = TRUE)
@@ -402,5 +402,68 @@ shinyServer(function(input, output, session) {
     
     return(tabCrit_out)
   }, sanitize.text.function = function(x) x)
+  
+  
+  
+  ## --------------- Download buttons
+  
+  ## simulation table
+  output$DownloadTab <- downloadHandler(
+    filename = function() {
+      filename <- "TabSim"
+      filename <- sprintf("airGRteaching_%s.csv", filename)
+    },
+    content = function(file) {
+      OBS <- getPrep()$OBS
+      SIM <- getRES()$SIM
+      if (input$SnowModel != "CemaNeige") {
+        PrecipSim <- NA
+        FracSolid <- NA
+      } else {
+        PrecipSol <- rowMeans(as.data.frame(OBS$InputsModel$LayerPrecip) * as.data.frame(OBS$InputsModel$LayerFracSolidPrecip), na.rm = TRUE)
+        PrecipSim <- rowMeans(as.data.frame(OBS$InputsModel$LayerPrecip), na.rm = TRUE)
+        FracSolid <- PrecipSol / PrecipSim
+        FracSolid <- ifelse(is.na(FracSolid)  & PrecipSol == 0 & PrecipSim == 0, 0, FracSolid)
+        PrecipSim <- PrecipSim[SIM$OptionsSimul$IndPeriod_Run]
+        FracSolid <- FracSolid[SIM$OptionsSimul$IndPeriod_Run]
+        FracSolid <- round(FracSolid, digits = 2)
+      }
+      TabSim <- data.frame(Dates           = SIM$OutputsModel$DatesR,
+                           PotEvap         = SIM$OutputsModel$PotEvap,
+                           PrecipObs       = SIM$OutputsModel$Precip,
+                           PrecipSim       = PrecipSim,
+                           PrecipFracSolid = FracSolid,
+                           Qobs            = SIM$OptionsCrit$Qobs,
+                           Qsim            = SIM$OutputsModel$Qsim)
+      write.table(TabSim, file = file, row.names = FALSE, sep = ";")
+    }
+  )
+  
+  ## plots
+  output$DownloadPlot <- downloadHandler(
+    filename = function() {
+      filename <- switch(input$PlotType,
+                            "Model performance" = "PlotModelPerf",
+                            "Flow time series"  = "PlotFlowTimeSeries",
+                            "State variables"   = "PlotStateVar",
+                            "Model diagram"     = "PlotModelDiag")
+      filename <- sprintf("airGRteaching_%s.png", filename)
+    },
+    content = function(file) {
+      k <- 1.75
+      if (getPlotType() == 1) {
+        png(filename = file, width = 1000*k,  height = ifelse(input$SnowModel != "CemaNeige", 700*k, 1100*k), pointsize = 14, res = 150)
+        plot(getRES()$SIM)
+        dev.off()
+      }
+      if (getPlotType() == 2) {
+        png(filename = file, width = 1000*k, height = 600*k, pointsize = 14, res = 150)
+        plot(getRES()$SIM, which = c( "Precip", "Flows"))
+        dev.off()
+      }
+    }
+  )
+  
+  
 })
 
diff --git a/inst/ShinyGR/ui.R b/inst/ShinyGR/ui.R
index cffea62249b9d7ce2e2dcec36b38afde9da562d3..543f7dbac7067f54bba171978aa1f3fe1822fffc 100644
--- a/inst/ShinyGR/ui.R
+++ b/inst/ShinyGR/ui.R
@@ -103,10 +103,10 @@ navbarPage(title       = div("airGRteaching",
                                                                        choices = c("NSE [Q]", "NSE [sqrt(Q)]", "NSE [log(Q)]",
                                                                                    "KGE [Q]", "KGE [sqrt(Q)]", "KGE [log(Q)]"))),
                                                  column(width = 6, actionButton("CalButton", label = "Run", width = "100%", 
-                                                                        icon = icon("refresh"),
-                                                                        style = ifelse(.GlobalEnv$.ShinyGR.args$theme != "Cerulean",
-                                                                                       "color: #fff; background-color: #A4C400; border-color: #A4C400; margin-top: 25px; padding:6px;",
-                                                                                       "")))
+                                                                                icon = icon("refresh"),
+                                                                                style = ifelse(.GlobalEnv$.ShinyGR.args$theme != "Cerulean",
+                                                                                               "color:#ffffff; background-color:#A4C400; border-color:#A4C400; margin-top:25px; padding:6px;",
+                                                                                               "color:#565656; background-color:#ECF0F1; border-color:#DCDCDC; margin-top:25px; padding:6px;")))
                                                )
                                   ), 
                                   
@@ -145,7 +145,7 @@ navbarPage(title       = div("airGRteaching",
                                             
                                             fluidRow(conditionalPanel(condition = "input.PlotType == 'Model performance'",
                                                                       column(width = 10,
-                                                                             plotOutput("stPlotMP", width = "100%", height = "900px"))), #"665px"
+                                                                             plotOutput("stPlotMP", width = "100%", height = "900px"))),
                                                      conditionalPanel(condition = "input.PlotType == 'Flow time series'",
                                                                       column(width = 10,
                                                                              dygraphOutput("dyPlotTS", width = "100%", height = "400px"))),
@@ -160,9 +160,17 @@ navbarPage(title       = div("airGRteaching",
                                                                              dygraphOutput("dyPlotMDq", width = "100%", height = "235px")),
                                                                       column(width = 04,
                                                                              plotOutput("stPlotMD", width = "100%", height = "665px"))),
-                                                     column(02, tableOutput("Criteria"))
+                                                     column(width = 02,
+                                                            tableOutput("Criteria"),
+                                                            downloadButton("DownloadTab" , label = "Download sim. as txt",
+                                                                           style = "color:#565656; background-color:#ECF0F1; border-color:#DCDCDC; width:170px; height:25px; font-size:90%; padding-top:2px;"), 
+                                                            conditionalPanel(condition = "input.PlotType == 'Model performance' || input.PlotType == 'Flow time series'",
+                                                                             downloadButton("DownloadPlot", label = "Download plot as png",
+                                                                                            style = "color:#565656; background-color:#ECF0F1; border-color:#DCDCDC; width:170px; height:25px; font-size:90%; padding-top:2px; margin-top:10px;")
+                                                            )
+                                                            
+                                                     )
                                             )
-                                            
                                   )
                     )
            ),