diff --git a/bot2/api/weather.py b/bot2/api/weather.py
index a7225b8..7e173b5 100644
--- a/bot2/api/weather.py
+++ b/bot2/api/weather.py
@@ -1,5 +1,4 @@
 import requests
-# import api.keys
 import datetime
 
 class WeatherFetch():
@@ -59,3 +58,25 @@ class WeatherFetch():
             ret_weather = self.last_weather
 
         return ret_weather
+
+    # def get_weather_by_city(self, city):
+    #     loc = get_coords_from_city(self, city)
+    #     weather = self.show_weather(loc)
+    #     return weather
+        
+        
+    # def get_coords_from_city(self, city):
+    #     url = "https://devru-latitude-longitude-find-v1.p.rapidapi.com/latlon.php"
+    #     data = {"location": city}
+    #     headers = {
+    #         "x-rapidapi-key" : "d4e0ab7ab3mshd5dde5a282649e0p11fd98jsnc93afd98e3aa",
+    #         "x-rapidapi-host" : "devru-latitude-longitude-find-v1.p.rapidapi.com",
+    #     }
+
+    #     #try:
+    #     resp = requests.request("GET", url, headers=headers, params=data)
+    #     result = resp.text
+    #     #except:
+    #     #    result = "???"
+    #     return result
+
diff --git a/bot2/commands/clock.py b/bot2/commands/clock.py
index 6e98d47..7591372 100644
--- a/bot2/commands/clock.py
+++ b/bot2/commands/clock.py
@@ -1,6 +1,8 @@
 from .template import *
 import time
 import numpy
+from PIL import Image
+import io
 
 CHOOSE, ADDARG = range(2)
 MESSAGE, WAKE, ALARM, IMAGE, ART = range(3,8)
@@ -59,7 +61,7 @@ class Clock(BotFunc):
         query.answer()
 
         query.edit_message_text("Ok. How long should it blink? (In seconds)")
-        self.next_state = {"ALARM" : "What frequency (Hertz)"}
+        self.next_state = {ALARM : "What frequency (Hertz)"}
         return ADDARG
 
     def show_message(self, update: Update, context: CallbackContext) -> None:
@@ -74,7 +76,7 @@ class Clock(BotFunc):
         query.answer()
 
         query.edit_message_text("How long (in minutes) should the image be displayed?")
-        self.next_state = {"IMAGE" : "Please send me the photo to display."}
+        self.next_state = {IMAGE : "Please send me the photo to display."}
         return ADDARG
 
     def art_gallery(self, update: Update, context: CallbackContext) -> None:
@@ -98,7 +100,7 @@ class Clock(BotFunc):
         duration = update.message.text
 
         def output(duration):
-            self.clock.set_brightness(value=0.1)
+            self.clock.set_brightness(value=1)
             start_color = numpy.array([153, 0, 51])
             end_color = numpy.array([255, 255, 0])
             empty = numpy.zeros((16,32))
@@ -137,19 +139,37 @@ class Clock(BotFunc):
         if not(duration == 0 or frequency == 0):
             update.message.reply_text("Now blinking")
             self.clock.run(output,(duration, frequency))
-        print("DOOONE")
         return ConversationHandler.END
         
 
 
     def exec_show_image(self, update: Update, context: CallbackContext) -> None:
         duration = self.additional_argument
-        img = update.message.photo
+        i = update.message.photo
+        img = update.message.photo[0]
+        bot = img.bot
+        id = img.file_id
 
+        file = bot.getFile(id).download_as_bytearray()
+        width = self.clock.IO.width
+        height = self.clock.IO.height
+
+        img = Image.open(io.BytesIO(file))
+        im_height = img.height
+        im_width = img.width
+
+        scalex = im_width // width
+        scaley = im_height // height
+        scale = min(scalex, scaley)
+
+        t = img.resize((width, height),box=(0,0,width*scale,height*scale))
+        a = numpy.asarray(t)
+        
         def output(image, duration):
-            self.clock.IO.set_matrix_rgb([100,0,0])
+            self.clock.IO.set_matrix(image)
+            time.sleep(int(duration) * 60)
 
-        self.clock.run(output,("image", duration))
+        self.clock.run(output,(a, duration))
         return ConversationHandler.END
 
 
diff --git a/bot2/commands/help.py b/bot2/commands/help.py
index 4ed8646..0fed99b 100644
--- a/bot2/commands/help.py
+++ b/bot2/commands/help.py
@@ -26,7 +26,7 @@ class Help(BotFunc):
                 # ]
             },
             fallbacks=[CommandHandler('help', self.entry_point)],
-            # conversation_timeout=5,
+            conversation_timeout=15,
         )
         return conv_handler
 
@@ -92,10 +92,11 @@ class Help(BotFunc):
 
         query.edit_message_text(
             text= message,
-            #reply_markup = reply_markup,
+            reply_markup = reply_markup,
             parse_mode = ParseMode.MARKDOWN_V2
         )
-        return ConversationHandler.END #EXECUTE
+        return EXECUTE
+
 
     def execute_now(self, update: Update, context: CallbackContext) -> None:
         query = update.callback_query
@@ -105,9 +106,10 @@ class Help(BotFunc):
         for func in funcs:
             if name == func.entry_points[0].command[0]:
                 break
-        callback = func.entry_points[0].callback
-        func.callback(update, context)
-        return FIRST
+        callback = func.entry_points[0].handle_update
+        callback(update, context.dispatcher, check_result=True, context=context)
+        return ConversationHandler.END
+        
 
     def timeout(self, update: Update, context: CallbackContext) -> None:
         """For dying conversation. Currently unused."""
diff --git a/bot2/commands/search.py b/bot2/commands/search.py
index c8a679c..76c2cf8 100644
--- a/bot2/commands/search.py
+++ b/bot2/commands/search.py
@@ -40,7 +40,7 @@ class Search(BotFunc):
         # formating
         self.results = results
         first = results[0]
-        message = first["text"] + "\n(" + first["url"] + ")\n"
+        message = first["text"] + "\n(" + first["url"] + ")\n\n"
 
         update.message.reply_text(text = message, reply_markup=reply_markup)
         return MORE
@@ -52,7 +52,7 @@ class Search(BotFunc):
 
         message = ""
         for r in self.results:
-            message += r["text"] + "\n(" + r["url"] + ")\n"
+            message += r["text"] + "\n(" + r["url"] + ")\n\n"
 
         query.edit_message_text(message)
         return ConversationHandler.END
\ No newline at end of file
diff --git a/clock/api/led.py b/clock/api/led.py
index 40d4187..124e20a 100644
--- a/clock/api/led.py
+++ b/clock/api/led.py
@@ -31,10 +31,10 @@ class OutputHandler():
 
         # reshape to the main size: (eg 32x16) (always aligns the given matrix on top left.)
 
-
+        if len(matrix.shape) != 3:
         # add depth (rgb values)
-        r3 = self.matrix_add_depth(matrix,colors)
-        self.set_matrix_rgb(r3,quadrant)
+            matrix = self.matrix_add_depth(matrix,colors)
+        self.set_matrix_rgb(matrix,quadrant)
 
 
     def matrix_add_depth(self, matrix, colors = []):
diff --git a/dashboard/main.py b/dashboard/main.py
index 0067208..92484e8 100644
--- a/dashboard/main.py
+++ b/dashboard/main.py
@@ -40,6 +40,7 @@ class DashBoard():
 
         @self.app.callback(Output('layout-update','children'), Input('interval-component','n_intervals'))
         def update_layout(n):
+            self.set_stats()
             kids = [
                 self.card_header(),
                 dbc.CardColumns([
@@ -91,55 +92,14 @@ class DashBoard():
 
 
     def card_bot_stats(self):
-        def cleanse_graph(category):
-            x = self.persistence["bot"][category]["hour"]
-            y = self.persistence["bot"][category]["count"]
-            xn = range(x[0], x[-1]+1)
-            yn = []
-            count = 0
-            for x_i in xn:
-                if x_i in x:
-                    yn.append(y[count])
-                    count += 1
-                else:
-                    yn.append(0)
-            xn = [i - int(x[0]) for i in xn]
-            return xn, yn
-
-        xs, ys = cleanse_graph("send_activity")
-        xr, yr = cleanse_graph("receive_activity")
-        xe, ye = cleanse_graph("execute_activity")
-        
-        fig = go.Figure()
-        fig.add_trace(go.Scatter(x=xr, y=yr, mode="lines", text="Gelesen", line=dict(width=4)))
-        fig.add_trace(go.Scatter(x=xs, y=ys, mode="lines", text="Gesendet", line=dict(width=4)))
-        fig.add_trace(go.Scatter(x=xe, y=ye, mode="lines", text="Ausgeführt", line=dict(width=4)))
-        
-        fig.update_xaxes(showgrid=False)
-        fig.update_yaxes(showgrid=False)
-        fig.layout.update(
-            xaxis = {
-                'showgrid': False, # thin lines in the background
-                'zeroline': False, # thick line at x=0
-                'visible': False,  # numbers below
-            }, # the same for yaxis
-            yaxis = {
-                'showgrid': False, # thin lines in the background
-                'zeroline': False, # thick line at x=0
-                'visible': False,  # numbers below
-            }, # the same for yaxis
-
-            showlegend=False,
-            margin=dict(l=0, r=0, t=0, b=0),
-            paper_bgcolor='rgba(0,0,0,0)',
-            plot_bgcolor='rgba(0,0,0,0)',
-            )
+        if not self.stat_graph:
+            self.set_stats()
 
         card = dbc.Card(
                 [   
                     dbc.CardBody([
                         html.H4("Statistiken", className="card-title"),
-                        dcc.Graph(figure=fig,config={'displayModeBar': False})
+                        dcc.Graph(figure=self.stat_graph, config={'displayModeBar': False})
                     ]),
                 ],
                 color="dark",
@@ -147,6 +107,7 @@ class DashBoard():
                 )
         return card
 
+
     def card_weather(self):
         def weather_item(name, overview, temps):
             if len(temps) == 2:
@@ -258,3 +219,51 @@ class DashBoard():
             )
         return card
 
+
+    ######### helper:
+    def set_stats(self):
+        def cleanse_graph(category):
+            x = self.persistence["bot"][category]["hour"]
+            y = self.persistence["bot"][category]["count"]
+            xn = range(x[0], x[-1]+1)
+            yn = []
+            count = 0
+            for x_i in xn:
+                if x_i in x:
+                    yn.append(y[count])
+                    count += 1
+                else:
+                    yn.append(0)
+            xn = [i - int(x[0]) for i in xn]
+            return xn, yn
+
+        xs, ys = cleanse_graph("send_activity")
+        xr, yr = cleanse_graph("receive_activity")
+        xe, ye = cleanse_graph("execute_activity")
+        
+        fig = go.Figure()
+        fig.add_trace(go.Scatter(x=xr, y=yr, mode="lines", text="Gelesen", line=dict(width=4)))
+        fig.add_trace(go.Scatter(x=xs, y=ys, mode="lines", text="Gesendet", line=dict(width=4)))
+        fig.add_trace(go.Scatter(x=xe, y=ye, mode="lines", text="Ausgeführt", line=dict(width=4)))
+        
+        fig.update_xaxes(showgrid=False)
+        fig.update_yaxes(showgrid=False)
+        fig.layout.update(
+            xaxis = {
+                'showgrid': False, # thin lines in the background
+                'zeroline': False, # thick line at x=0
+                'visible': False,  # numbers below
+            }, # the same for yaxis
+            yaxis = {
+                'showgrid': False, # thin lines in the background
+                'zeroline': False, # thick line at x=0
+                'visible': False,  # numbers below
+            }, # the same for yaxis
+
+            showlegend=False,
+            margin=dict(l=0, r=0, t=0, b=0),
+            paper_bgcolor='rgba(0,0,0,0)',
+            plot_bgcolor='rgba(0,0,0,0)',
+            )
+        
+        self.stat_graph = fig
diff --git a/image.jpg b/image.jpg
new file mode 100644
index 0000000..a3928aa
Binary files /dev/null and b/image.jpg differ