diff --git a/UI/UI_elements.py b/UI/UI_elements.py
index 533f210..88b3610 100644
--- a/UI/UI_elements.py
+++ b/UI/UI_elements.py
@@ -459,19 +459,21 @@ def scroll_area(layer, win, name, x, y, width, height, maxlength,
     if  win.current['mx'] in range(x, x+width) \
     and win.current['my'] in range(y, y+height) :
         if not mmb_only:
-            if not sideways:
-                amount = win.current["scroll"][1]*strenght
-            else:
-                amount = win.current["scroll"][0]*strenght
-        
+            
+            amount = win.current["scroll"][1]*strenght
+            
+                
         if mmb_only:
             mmb = True
         
         # Middle mouse button scroll, or using a graphical tablet.
         if mmb:
             if win.current["MMB"]:
-                amount = 0 - ( win.current["my"] - win.previous["my"] )
-    
+                if not sideways:
+                    amount = 0 - ( win.current["my"] - win.previous["my"] )
+                else:
+                    amount = 0 - ( win.current["mx"] - win.previous["mx"] )
+                
     # I guess I need to separate the logic into a separate minifunction.
     # I will use later for the scroll bar thingy. So not to rewrite the code
     # Here is a function thingy.
@@ -482,12 +484,20 @@ def scroll_area(layer, win, name, x, y, width, height, maxlength,
         # Scroll logic
         win.scroll[name] -= amount
         
-        # If too low  
-        if win.scroll[name] < (1-maxlength+height):
-            win.scroll[name] = (1-maxlength+height)
-        # If too high
-        if win.scroll[name] > 0:
-            win.scroll[name] = 0    
+        if not sideways:
+            # If too low  
+            if win.scroll[name] < (1-maxlength+height):
+                win.scroll[name] = (1-maxlength+height)
+            # If too high
+            if win.scroll[name] > 0:
+                win.scroll[name] = 0    
+        else:
+            # If too low  
+            if win.scroll[name] < (1-maxlength+width):
+                win.scroll[name] = (1-maxlength+width)
+            # If too high
+            if win.scroll[name] > 0:
+                win.scroll[name] = 0 
     logic()
     # Not BAR. Which is going to be drawn at a side of what ever content there
     # Basically a scrollbar. But implemented from scratch. Because I'm crazy.
@@ -577,7 +587,86 @@ def scroll_area(layer, win, name, x, y, width, height, maxlength,
                 LSy,
                 5
                 )
+
+        else:
+            
+            # Fist let's make some math in front. Because things like this
+            # require ton of maths. And it's good to have some predone.
+            
+            tobreak = False # Also if we can abort the operation early with it.
+            fraction = width / maxlength # Similar to progress bar for now
+            if fraction > 1:
+                tobreak = True
+            
+            # To break parameter basically says. To draw it the bar only when 
+            # it's actully needed. When content aka maxlength is bigger then
+            # our viewport.
+            
+            if not tobreak:
                 
+                # Now the offset value. That will move our progress bar with 
+                # the scroll value.
+                
+                offset = (width-60)*( (1-win.scroll[name])  / maxlength )        
+                
+                # Background bar
+                
+                UI_color.set(layer, win, "background")
+                roundrect(layer, win,
+                x+30,
+                (y+height)-20,
+                width-60,
+                10,
+                5
+                )
+                
+                # Active bar
+                
+                UI_color.set(layer, win, "button_active")
+                
+                # Let's save a little bit more math because it's going to be
+                # vild. And I love it.
+                
+                Lx  = (y+height)-20
+                LSx = 10
+                Ly  = x+30+offset
+                LSy = (width-60)*fraction
+                
+                # Mouse over thingy. To make the bat a tiny bit brighter. 
+                # indicating to the user that it's now could be used.
+                
+                if  win.current['my'] in range(int(Lx), int(Lx+LSx)) \
+                and win.current['mx'] in range(int(Ly), int(Lx+LSy)) :
+                    UI_color.set(layer, win, "button_clicked")
+                
+                # Now separatelly we gonna check for if the mouse pressed. 
+                # Remember if it's not pressed it's False. It's written in one
+                # of the files. Basically I want to be able to move the mouse
+                # outside the bar while moving. And so it won't cancel the motion.
+                
+                # It seems like I did something wrong. Anyways it works.
+                
+                if win.current["LMB"]:
+                    if  int(win.current['LMB'][1]) in range(int(Lx), int(Lx+LSx)) \
+                    and int(win.current['LMB'][0]) in range(int(x), int(x+(width-60))) :
+                        
+                        UI_color.set(layer, win, "button_clicked")
+                        
+                        # A bit more math to set the value back.
+                        amount = ( win.current["mx"] - win.previous["mx"] ) / \
+                                   (width-60) * maxlength
+                        logic() # Yeah. Look a few lines back.
+                
+                # And only after all of this nonsense we can draw the cube. Or
+                # should I say roundrect? A button? Aaaaaa.... 
+                
+                roundrect(layer, win,
+                Ly,
+                Lx,
+                LSy,
+                LSx,
+                5
+                )
 
 def text(outlayer, win, name, x, y, width, height, set_text="", parse=False, fill=True,
         editable=True, multiline=False , linebreak=False, centered=False, tip="",