commit bde2c350c80d0a30ff67986c41702cf077e93b52
Author: kacerekz <zuzana.kacerekova@gmail.com>
Date:   Mon Jun 14 01:37:55 2021 +0200

    Cosmetic changes to the project

diff --git a/Client/Client/Assets/AliasDropdownItem.cs b/Client/Client/Assets/AliasDropdownItem.cs
deleted file mode 100644
index 521ab46..0000000
--- a/Client/Client/Assets/AliasDropdownItem.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-﻿using System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.EventSystems;
-using UnityEngine.UI;
-
-public class AliasDropdownItem : MonoBehaviour
-{
-    public Toggle toggle;
-    public Text text;
-    public InputField input;
-    public BuildingPanel panel;
-
-    // Start is called before the first frame update
-    void Start()
-    {
-        toggle = GetComponent<Toggle>();
-        text = GetComponentInChildren<Text>();
-
-        toggle.onValueChanged.AddListener((isSelected) =>
-        {
-            if (isSelected) 
-            { 
-                input.text = text.text;
-
-                panel.findBuildingButton.interactable = false;
-
-                foreach (string alias in BuildingPanel.aliases.Keys)
-                {
-                    if (alias.ToLower().Trim() == input.text.ToLower())
-                    {
-                        panel.findBuildingButton.interactable = true;
-                        return;
-                    }
-                }
-
-            }
-        });
-    }
-
-}
\ No newline at end of file
diff --git a/Client/Client/Assets/AliasDropdownItem.cs.meta b/Client/Client/Assets/AliasDropdownItem.cs.meta
deleted file mode 100644
index 4f29246..0000000
--- a/Client/Client/Assets/AliasDropdownItem.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: b3e7f9cfae510d146a3c0fc34d5f21ea
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Resources/Maps/Test.meta b/Client/Client/Assets/Resources/Maps/Test.meta
deleted file mode 100644
index 59d56a9..0000000
--- a/Client/Client/Assets/Resources/Maps/Test.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: f20e6151dbee0c745ba47b094b1c6683
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Resources/Maps/Test/layout.txt b/Client/Client/Assets/Resources/Maps/Test/layout.txt
deleted file mode 100644
index 0c5b07a..0000000
--- a/Client/Client/Assets/Resources/Maps/Test/layout.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-underlay
-overlay-a
diff --git a/Client/Client/Assets/Resources/Maps/Test/layout.txt.meta b/Client/Client/Assets/Resources/Maps/Test/layout.txt.meta
deleted file mode 100644
index 878e948..0000000
--- a/Client/Client/Assets/Resources/Maps/Test/layout.txt.meta
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 8169c07597de615478a557a07f1dfc78
-TextScriptImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Resources/Maps/Test/overlay-a.png b/Client/Client/Assets/Resources/Maps/Test/overlay-a.png
deleted file mode 100644
index 29e9b7a..0000000
Binary files a/Client/Client/Assets/Resources/Maps/Test/overlay-a.png and /dev/null differ
diff --git a/Client/Client/Assets/Resources/Maps/Test/overlay-a.png.meta b/Client/Client/Assets/Resources/Maps/Test/overlay-a.png.meta
deleted file mode 100644
index 7b5ac4d..0000000
--- a/Client/Client/Assets/Resources/Maps/Test/overlay-a.png.meta
+++ /dev/null
@@ -1,92 +0,0 @@
-fileFormatVersion: 2
-guid: 521df66e25aade04e88510ba6773da02
-TextureImporter:
-  internalIDToNameTable: []
-  externalObjects: {}
-  serializedVersion: 11
-  mipmaps:
-    mipMapMode: 0
-    enableMipMap: 0
-    sRGBTexture: 1
-    linearTexture: 0
-    fadeOut: 0
-    borderMipMap: 0
-    mipMapsPreserveCoverage: 0
-    alphaTestReferenceValue: 0.5
-    mipMapFadeDistanceStart: 1
-    mipMapFadeDistanceEnd: 3
-  bumpmap:
-    convertToNormalMap: 0
-    externalNormalMap: 0
-    heightScale: 0.25
-    normalMapFilter: 0
-  isReadable: 0
-  streamingMipmaps: 0
-  streamingMipmapsPriority: 0
-  grayScaleToAlpha: 0
-  generateCubemap: 6
-  cubemapConvolution: 0
-  seamlessCubemap: 0
-  textureFormat: 1
-  maxTextureSize: 2048
-  textureSettings:
-    serializedVersion: 2
-    filterMode: -1
-    aniso: -1
-    mipBias: -100
-    wrapU: 1
-    wrapV: 1
-    wrapW: 1
-  nPOTScale: 0
-  lightmap: 0
-  compressionQuality: 50
-  spriteMode: 1
-  spriteExtrude: 1
-  spriteMeshType: 1
-  alignment: 0
-  spritePivot: {x: 0.5, y: 0.5}
-  spritePixelsToUnits: 100
-  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
-  alphaUsage: 1
-  alphaIsTransparency: 1
-  spriteTessellationDetail: -1
-  textureType: 8
-  textureShape: 1
-  singleChannelComponent: 0
-  maxTextureSizeSet: 0
-  compressionQualitySet: 0
-  textureFormatSet: 0
-  applyGammaDecoding: 0
-  platformSettings:
-  - serializedVersion: 3
-    buildTarget: DefaultTexturePlatform
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  spriteSheet:
-    serializedVersion: 2
-    sprites: []
-    outline: []
-    physicsShape: []
-    bones: []
-    spriteID: 5e97eb03825dee720800000000000000
-    internalID: 0
-    vertices: []
-    indices: 
-    edges: []
-    weights: []
-    secondaryTextures: []
-  spritePackingTag: 
-  pSDRemoveMatte: 0
-  pSDShowRemoveMatteOption: 0
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Resources/Maps/Test/underlay.png b/Client/Client/Assets/Resources/Maps/Test/underlay.png
deleted file mode 100644
index 33ec704..0000000
Binary files a/Client/Client/Assets/Resources/Maps/Test/underlay.png and /dev/null differ
diff --git a/Client/Client/Assets/Resources/Maps/Test/underlay.png.meta b/Client/Client/Assets/Resources/Maps/Test/underlay.png.meta
deleted file mode 100644
index cf4a451..0000000
--- a/Client/Client/Assets/Resources/Maps/Test/underlay.png.meta
+++ /dev/null
@@ -1,92 +0,0 @@
-fileFormatVersion: 2
-guid: 45939aa7035260844b6c6cba3bc2e446
-TextureImporter:
-  internalIDToNameTable: []
-  externalObjects: {}
-  serializedVersion: 11
-  mipmaps:
-    mipMapMode: 0
-    enableMipMap: 0
-    sRGBTexture: 1
-    linearTexture: 0
-    fadeOut: 0
-    borderMipMap: 0
-    mipMapsPreserveCoverage: 0
-    alphaTestReferenceValue: 0.5
-    mipMapFadeDistanceStart: 1
-    mipMapFadeDistanceEnd: 3
-  bumpmap:
-    convertToNormalMap: 0
-    externalNormalMap: 0
-    heightScale: 0.25
-    normalMapFilter: 0
-  isReadable: 0
-  streamingMipmaps: 0
-  streamingMipmapsPriority: 0
-  grayScaleToAlpha: 0
-  generateCubemap: 6
-  cubemapConvolution: 0
-  seamlessCubemap: 0
-  textureFormat: 1
-  maxTextureSize: 2048
-  textureSettings:
-    serializedVersion: 2
-    filterMode: -1
-    aniso: -1
-    mipBias: -100
-    wrapU: 1
-    wrapV: 1
-    wrapW: 1
-  nPOTScale: 0
-  lightmap: 0
-  compressionQuality: 50
-  spriteMode: 1
-  spriteExtrude: 1
-  spriteMeshType: 1
-  alignment: 0
-  spritePivot: {x: 0.5, y: 0.5}
-  spritePixelsToUnits: 100
-  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
-  spriteGenerateFallbackPhysicsShape: 1
-  alphaUsage: 1
-  alphaIsTransparency: 1
-  spriteTessellationDetail: -1
-  textureType: 8
-  textureShape: 1
-  singleChannelComponent: 0
-  maxTextureSizeSet: 0
-  compressionQualitySet: 0
-  textureFormatSet: 0
-  applyGammaDecoding: 0
-  platformSettings:
-  - serializedVersion: 3
-    buildTarget: DefaultTexturePlatform
-    maxTextureSize: 2048
-    resizeAlgorithm: 0
-    textureFormat: -1
-    textureCompression: 1
-    compressionQuality: 50
-    crunchedCompression: 0
-    allowsAlphaSplitting: 0
-    overridden: 0
-    androidETC2FallbackOverride: 0
-    forceMaximumCompressionQuality_BC6H_BC7: 0
-  spriteSheet:
-    serializedVersion: 2
-    sprites: []
-    outline: []
-    physicsShape: []
-    bones: []
-    spriteID: 5e97eb03825dee720800000000000000
-    internalID: 0
-    vertices: []
-    indices: 
-    edges: []
-    weights: []
-    secondaryTextures: []
-  spritePackingTag: 
-  pSDRemoveMatte: 0
-  pSDShowRemoveMatteOption: 0
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scenes/WebGL.unity b/Client/Client/Assets/Scenes/WebGL.unity
index 03fdb31..77ec70b 100644
--- a/Client/Client/Assets/Scenes/WebGL.unity
+++ b/Client/Client/Assets/Scenes/WebGL.unity
@@ -121,6 +121,159 @@ NavMeshSettings:
     debug:
       m_Flags: 0
   m_NavMeshData: {fileID: 0}
+--- !u!1 &8546169
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8546170}
+  - component: {fileID: 8546172}
+  - component: {fileID: 8546171}
+  m_Layer: 5
+  m_Name: Set Prediction
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8546170
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8546169}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1641538590}
+  m_RootOrder: 34
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3498.7988}
+  m_SizeDelta: {x: 1725, y: 281.26}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &8546171
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8546169}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: 'Using the "Set prediction date" button will take you to a panel in which
+    a start and and end date can be selected. By checking the "Use end date" box,
+    a time span will be used for prediction, otherwise a single time (the start time)
+    will be used. By checking "Use own weather", the predictor will use the user-set
+    weather. Otherwise, it will use the automatic prediction, which is currently
+    available only for a span of three days.
+
+
+    In future, the predictor could
+    be adjusted and therefore the option to predict beyond this interval is kept,
+    with a warning shown, that the predictor will likely be unable to provide data
+    for at least a part of a given interval, unless manual weather is selected.
+
+
+    The
+    "Find a building" button serves to easily find a building in the simulation and
+    zoom in on it. First year (and older) students may find this function useful
+    when locating new areas of the campus. You can use the room prefixes such as
+    UC or UN to search for buildings, or entire room identifiers such as "UC336".
+    The list of recognized areas is further described in section 4.'
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 49750830b71ed3546bebefe4be946048, type: 2}
+  m_sharedMaterial: {fileID: 1742611629344109958, guid: 49750830b71ed3546bebefe4be946048,
+    type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4278190080
+  m_fontColor: {r: 0, g: 0, b: 0, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 24
+  m_fontSizeBase: 24
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 8
+  m_VerticalAlignment: 256
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 1
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &8546172
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8546169}
+  m_CullTransparentMesh: 0
 --- !u!1001 &8659326
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -652,7 +805,7 @@ GameObject:
   - component: {fileID: 21404730}
   - component: {fileID: 21404729}
   m_Layer: 5
-  m_Name: ToMapText (1)
+  m_Name: -/-
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -672,10 +825,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 18
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1825.34}
+  m_SizeDelta: {x: 1725, y: 23.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &21404729
 MonoBehaviour:
@@ -1033,7 +1186,7 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
     m_MinSize: 1
@@ -1788,9 +1941,9 @@ RectTransform:
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 20}
+  m_SizeDelta: {x: -17, y: 20}
   m_Pivot: {x: 0, y: 0}
 --- !u!114 &73023236
 MonoBehaviour:
@@ -2098,7 +2251,7 @@ GameObject:
   - component: {fileID: 87370964}
   - component: {fileID: 87370963}
   m_Layer: 5
-  m_Name: ToMapText (2)
+  m_Name: -/-
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -2118,10 +2271,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 32
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3278.319}
+  m_SizeDelta: {x: 1725, y: 23.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &87370963
 MonoBehaviour:
@@ -2580,10 +2733,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 228, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -815.52}
+  m_SizeDelta: {x: 228, y: 82}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &100400878
 MonoBehaviour:
@@ -2654,10 +2807,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -622.01}
+  m_SizeDelta: {x: 1725, y: 168.76}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &101292849
 MonoBehaviour:
@@ -2771,7 +2924,7 @@ GameObject:
   - component: {fileID: 107741575}
   - component: {fileID: 107741574}
   m_Layer: 5
-  m_Name: ToTable (2)
+  m_Name: SetW BTN
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -2791,10 +2944,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 28
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 357, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3001.0293}
+  m_SizeDelta: {x: 357, y: 88}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &107741574
 MonoBehaviour:
@@ -3180,10 +3333,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 20
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 2
     m_MaxSize: 40
     m_Alignment: 3
     m_AlignByGeometry: 0
@@ -3342,7 +3495,7 @@ GameObject:
   - component: {fileID: 142857962}
   - component: {fileID: 142857961}
   m_Layer: 5
-  m_Name: ToMap (1)
+  m_Name: Legend Table
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -3362,10 +3515,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 17
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 190, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1743.62}
+  m_SizeDelta: {x: 190, y: 100}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &142857961
 MonoBehaviour:
@@ -3592,10 +3745,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 1
     m_MaxSize: 40
     m_Alignment: 4
     m_AlignByGeometry: 0
@@ -3816,7 +3969,7 @@ GameObject:
   - component: {fileID: 160626652}
   - component: {fileID: 160626651}
   m_Layer: 5
-  m_Name: ToTable (1)
+  m_Name: Legend Map
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -3836,10 +3989,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 14
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 225, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1546.55}
+  m_SizeDelta: {x: 225, y: 71}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &160626651
 MonoBehaviour:
@@ -3968,7 +4121,7 @@ GameObject:
   - component: {fileID: 165605068}
   - component: {fileID: 165605067}
   m_Layer: 5
-  m_Name: Gap (2)
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -3988,10 +4141,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 13
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1476.985}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &165605067
 MonoBehaviour:
@@ -4877,10 +5030,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 12
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1302.29}
+  m_SizeDelta: {x: 1725, y: 281.26}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &235181369
 MonoBehaviour:
@@ -6130,6 +6283,140 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 316053233}
   m_CullTransparentMesh: 0
+--- !u!1 &324653355
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 324653356}
+  - component: {fileID: 324653358}
+  - component: {fileID: 324653357}
+  m_Layer: 5
+  m_Name: '-'
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &324653356
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 324653355}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1641538590}
+  m_RootOrder: 33
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3324.104}
+  m_SizeDelta: {x: 1725, y: 28.13}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &324653357
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 324653355}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: ' '
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 49750830b71ed3546bebefe4be946048, type: 2}
+  m_sharedMaterial: {fileID: 1742611629344109958, guid: 49750830b71ed3546bebefe4be946048,
+    type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4278190080
+  m_fontColor: {r: 0, g: 0, b: 0, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 24
+  m_fontSizeBase: 24
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 8
+  m_VerticalAlignment: 256
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 1
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &324653358
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 324653355}
+  m_CullTransparentMesh: 0
 --- !u!1 &328142017
 GameObject:
   m_ObjectHideFlags: 0
@@ -6142,7 +6429,7 @@ GameObject:
   - component: {fileID: 328142020}
   - component: {fileID: 328142019}
   m_Layer: 5
-  m_Name: ToTableText
+  m_Name: -/-
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -6162,10 +6449,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -888.24}
+  m_SizeDelta: {x: 1725, y: 23.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &328142019
 MonoBehaviour:
@@ -7196,7 +7483,7 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 8d53f5c068ec7494697462664398825d, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
     m_MinSize: 0
@@ -7733,7 +8020,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 500, y: 50}
+  m_SizeDelta: {x: 500, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &469665293
 MonoBehaviour:
@@ -7767,7 +8054,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "Teslova 5, 9, 9a, 11\n  objekty C, F, G, H "
+  m_Text: "Teslova 5, 9, 9a, 11\n  objekty C, F, G, H \n  - T, TF, TG, TH"
 --- !u!222 &469665294
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -7891,7 +8178,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &482668034
 MonoBehaviour:
@@ -7925,7 +8212,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "Chodsk\xE9 n\xE1m\u011Bst\xED 1"
+  m_Text: "Chodsk\xE9 n\xE1m\u011Bst\xED 1\n  - CH"
 --- !u!222 &482668035
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -7966,10 +8253,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 100, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -451.63}
+  m_SizeDelta: {x: 100, y: 16}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &483097287
 MonoBehaviour:
@@ -8957,7 +9244,7 @@ MonoBehaviour:
     m_Top: 0
     m_Bottom: 0
   m_ChildAlignment: 1
-  m_Spacing: 20
+  m_Spacing: 15
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 0
   m_ChildControlWidth: 1
@@ -9034,7 +9321,7 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -10063,7 +10350,7 @@ GameObject:
   - component: {fileID: 637651713}
   - component: {fileID: 637651712}
   m_Layer: 5
-  m_Name: Gap
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -10083,10 +10370,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 8
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -934.025}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &637651712
 MonoBehaviour:
@@ -10275,7 +10562,7 @@ GameObject:
   - component: {fileID: 645214327}
   - component: {fileID: 645214326}
   m_Layer: 5
-  m_Name: WeatherText
+  m_Name: -/-
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -10295,10 +10582,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 24
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -2499.6697}
+  m_SizeDelta: {x: 1725, y: 23.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &645214326
 MonoBehaviour:
@@ -10791,7 +11078,7 @@ GameObject:
   - component: {fileID: 687702507}
   - component: {fileID: 687702506}
   m_Layer: 5
-  m_Name: ToTableText (1)
+  m_Name: -/-
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -10811,10 +11098,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 15
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1613.77}
+  m_SizeDelta: {x: 1725, y: 23.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &687702506
 MonoBehaviour:
@@ -10996,7 +11283,7 @@ MonoBehaviour:
   m_HandleRect: {fileID: 994209126}
   m_Direction: 2
   m_Value: 1
-  m_Size: 0.21253857
+  m_Size: 0.21044552
   m_NumberOfSteps: 0
   m_OnValueChanged:
     m_PersistentCalls:
@@ -11268,10 +11555,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 1
     m_MaxSize: 40
     m_Alignment: 4
     m_AlignByGeometry: 0
@@ -12039,7 +12326,7 @@ GameObject:
   - component: {fileID: 769610872}
   - component: {fileID: 769610871}
   m_Layer: 5
-  m_Name: ToMapText
+  m_Name: -/-
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -12059,10 +12346,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 10
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1081.81}
+  m_SizeDelta: {x: 1725, y: 23.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &769610871
 MonoBehaviour:
@@ -12401,10 +12688,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 20
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 2
     m_MaxSize: 40
     m_Alignment: 5
     m_AlignByGeometry: 0
@@ -12458,7 +12745,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 500, y: 50}
+  m_SizeDelta: {x: 500, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &785668451
 MonoBehaviour:
@@ -12538,7 +12825,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 500, y: 50}
+  m_SizeDelta: {x: 500, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &791353659
 MonoBehaviour:
@@ -12572,7 +12859,8 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "Sedl\xE1\u010Dkova 15, 19, 31, 38-40,\n  Veleslav\xEDnova 27-29, 42"
+  m_Text: "Sedl\xE1\u010Dkova 15, 19, 31, 38-40,\n  Veleslav\xEDnova 27-29, 42\n 
+    - SP, SD, ST, SO, VC"
 --- !u!222 &791353660
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -12614,7 +12902,7 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -12980,7 +13268,7 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 10, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -14095,12 +14383,12 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 1641538590}
-  m_RootOrder: 34
+  m_RootOrder: 36
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3695.429}
+  m_SizeDelta: {x: 1725, y: 38}
   m_Pivot: {x: 0.5, y: 1}
 --- !u!114 &923257992
 MonoBehaviour:
@@ -14628,7 +14916,7 @@ GameObject:
   - component: {fileID: 950230929}
   - component: {fileID: 950230928}
   m_Layer: 5
-  m_Name: Gap
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -14648,10 +14936,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -740.455}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &950230928
 MonoBehaviour:
@@ -15106,7 +15394,7 @@ MonoBehaviour:
     m_Top: 0
     m_Bottom: 0
   m_ChildAlignment: 0
-  m_Spacing: 20
+  m_Spacing: 15
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 0
   m_ChildControlWidth: 0
@@ -15346,8 +15634,8 @@ RectTransform:
   m_Father: {fileID: 520066068}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 0.7895545}
+  m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -15594,7 +15882,7 @@ GameObject:
   - component: {fileID: 1012737720}
   - component: {fileID: 1012737719}
   m_Layer: 5
-  m_Name: Gap (5)
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -15614,10 +15902,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 30
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3122.5342}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1012737719
 MonoBehaviour:
@@ -16550,10 +16838,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 1
     m_MaxSize: 40
     m_Alignment: 4
     m_AlignByGeometry: 0
@@ -16607,7 +16895,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1063661115
 MonoBehaviour:
@@ -16641,7 +16929,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: Riegrova 11, 17
+  m_Text: "Riegrova 11, 17\n  - RJ, RS"
 --- !u!222 &1063661116
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -18362,7 +18650,7 @@ GameObject:
   - component: {fileID: 1193051063}
   - component: {fileID: 1193051062}
   m_Layer: 5
-  m_Name: TutorialText (2)
+  m_Name: SetWeather
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -18382,10 +18670,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 26
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -2734.2095}
+  m_SizeDelta: {x: 1725, y: 309.38}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1193051062
 MonoBehaviour:
@@ -18419,21 +18707,7 @@ MonoBehaviour:
     no chance of rain and 0 m/s wind speed.\n\nA manual prediction can be set using
     the \"Set weather manually\" button, and can be cleared by pressing \"Clear weather\".
     At any point, a status indicator on the weather display panel shows whether automatic
-    or manual forecast is being used.\n\nUsing the \"Set prediction date\" button
-    will take you to a panel in which a start and and end date can be selected. By
-    checking the \"Use end date\" box, a time span will be used for prediction, otherwise
-    a single time (the start time) will be used. By checking \"Use own weather\",
-    the predictor will use the user-set weather. Otherwise, it will use the automatic
-    prediction, which is currently available only for a span of three days.\n\nIn
-    future, the predictor could be adjusted and therefore the option to predict beyond
-    this interval is kept, with a warning shown, that the predictor will likely be
-    unable to provide data for at least a part of a given interval, unless manual
-    weather is selected.\n\nThe \"Find a building\" button serves to easily find
-    a building in the simulation and zoom in on it. First year (and older) students
-    may find this function useful when locating new areas of the campus. You can
-    use the room prefixes such as UC or UN to search for buildings, or entire room
-    identifiers such as \"UC336\". The list of recognized areas is further described
-    in section 4."
+    or manual forecast is being used."
   m_isRightToLeft: 0
   m_fontAsset: {fileID: 11400000, guid: 49750830b71ed3546bebefe4be946048, type: 2}
   m_sharedMaterial: {fileID: 1742611629344109958, guid: 49750830b71ed3546bebefe4be946048,
@@ -19090,10 +19364,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 20
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 2
     m_MaxSize: 40
     m_Alignment: 3
     m_AlignByGeometry: 0
@@ -19225,7 +19499,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1260796576
 MonoBehaviour:
@@ -19259,7 +19533,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: Husova 11
+  m_Text: "Husova 11\n  - HJ"
 --- !u!222 &1260796577
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -19966,10 +20240,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 1
     m_MaxSize: 40
     m_Alignment: 4
     m_AlignByGeometry: 0
@@ -20086,7 +20360,7 @@ GameObject:
   - component: {fileID: 1297963518}
   - component: {fileID: 1297963517}
   m_Layer: 5
-  m_Name: Gap (1)
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -20106,10 +20380,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 25
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -2545.4546}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1297963517
 MonoBehaviour:
@@ -20347,10 +20621,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 21
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -2035.44}
+  m_SizeDelta: {x: 1725, y: 168.76}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1300247647
 MonoBehaviour:
@@ -20777,7 +21051,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &1316714130
 RectTransform:
   m_ObjectHideFlags: 0
@@ -20957,10 +21231,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 9
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 226, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1009.09}
+  m_SizeDelta: {x: 226, y: 82}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1330625395
 MonoBehaviour:
@@ -21354,7 +21628,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &1358035355
 RectTransform:
   m_ObjectHideFlags: 0
@@ -21543,12 +21817,12 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 1641538590}
-  m_RootOrder: 35
+  m_RootOrder: 37
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3908.119}
+  m_SizeDelta: {x: 1725, y: 309.38}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1362998281
 MonoBehaviour:
@@ -21680,10 +21954,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -240.815}
+  m_SizeDelta: {x: 1725, y: 365.63}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1382269605
 MonoBehaviour:
@@ -22798,10 +23072,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 20
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1893.0599}
+  m_SizeDelta: {x: 1725, y: 38}
   m_Pivot: {x: 0.5, y: 1}
 --- !u!114 &1430890187
 MonoBehaviour:
@@ -23016,7 +23290,7 @@ GameObject:
   - component: {fileID: 1433118818}
   - component: {fileID: 1433118817}
   m_Layer: 5
-  m_Name: ToTableText (2)
+  m_Name: -/-
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -23036,10 +23310,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 29
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3076.7493}
+  m_SizeDelta: {x: 1725, y: 23.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1433118817
 MonoBehaviour:
@@ -23171,10 +23445,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: 0}
+  m_SizeDelta: {x: 1725, y: 38}
   m_Pivot: {x: 0.5, y: 1}
 --- !u!114 &1440830863
 MonoBehaviour:
@@ -23655,12 +23929,12 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 1641538590}
-  m_RootOrder: 33
+  m_RootOrder: 35
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 100, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3667.429}
+  m_SizeDelta: {x: 100, y: 16}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1453365193
 MonoBehaviour:
@@ -23923,7 +24197,7 @@ GameObject:
   - component: {fileID: 1467629574}
   - component: {fileID: 1467629573}
   m_Layer: 5
-  m_Name: Gap
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -23943,10 +24217,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 22
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -2153.8848}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1467629573
 MonoBehaviour:
@@ -24206,10 +24480,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 19
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 100, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1865.0599}
+  m_SizeDelta: {x: 100, y: 16}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1486432587
 MonoBehaviour:
@@ -24310,10 +24584,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 1
     m_MaxSize: 40
     m_Alignment: 4
     m_AlignByGeometry: 0
@@ -24367,7 +24641,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1492125306
 MonoBehaviour:
@@ -24401,7 +24675,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "Sady P\u011Btat\u0159ic\xE1tn\xEDk\u016F 14, 16"
+  m_Text: "Sady P\u011Btat\u0159ic\xE1tn\xEDk\u016F 14, 16\n  - PC, PS"
 --- !u!222 &1492125307
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -25065,7 +25339,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1564566756
 MonoBehaviour:
@@ -25099,7 +25373,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: Jungmannova 1, 3
+  m_Text: "Jungmannova 1, 3\n  - JJ"
 --- !u!222 &1564566757
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -25145,7 +25419,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1573787682
 MonoBehaviour:
@@ -25179,7 +25453,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "Klatovsk\xE1 51"
+  m_Text: "Klatovsk\xE1 51\n  - KL"
 --- !u!222 &1573787683
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -25506,7 +25780,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 100, y: 0}
+  m_AnchoredPosition: {x: 100, y: 50}
   m_SizeDelta: {x: 1050, y: 700}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1628087667
@@ -25583,7 +25857,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1629330793
 MonoBehaviour:
@@ -25617,7 +25891,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "Koll\xE1rova 19"
+  m_Text: "Koll\xE1rova 19\n  - KO"
 --- !u!222 &1629330794
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -26014,6 +26288,8 @@ RectTransform:
   - {fileID: 1012737718}
   - {fileID: 2097123349}
   - {fileID: 87370962}
+  - {fileID: 324653356}
+  - {fileID: 8546170}
   - {fileID: 1453365192}
   - {fileID: 923257991}
   - {fileID: 1362998280}
@@ -26023,7 +26299,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
+  m_SizeDelta: {x: -33, y: 4062.809}
   m_Pivot: {x: 0, y: 1}
 --- !u!114 &1641538591
 MonoBehaviour:
@@ -27186,10 +27462,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 23
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 367, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -2327.9497}
+  m_SizeDelta: {x: 367, y: 280}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1702604381
 MonoBehaviour:
@@ -28176,7 +28452,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 500, y: 50}
+  m_SizeDelta: {x: 500, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1768824709
 MonoBehaviour:
@@ -28724,7 +29000,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 500, y: 50}
+  m_SizeDelta: {x: 500, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1801102824
 MonoBehaviour:
@@ -28758,7 +29034,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: Tylova 59
+  m_Text: "Tylova 59\n  - TY, TS"
 --- !u!222 &1801102825
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -28986,7 +29262,7 @@ GameObject:
   - component: {fileID: 1816361344}
   - component: {fileID: 1816361343}
   m_Layer: 5
-  m_Name: Gap
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -29006,10 +29282,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 11
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1127.595}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1816361343
 MonoBehaviour:
@@ -29219,9 +29495,9 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
+  m_SizeDelta: {x: -17, y: 0}
   m_Pivot: {x: 0, y: 1}
 --- !u!114 &1822448961
 MonoBehaviour:
@@ -30258,7 +30534,7 @@ GameObject:
   - component: {fileID: 1899073949}
   - component: {fileID: 1899073948}
   m_Layer: 5
-  m_Name: Gap (3)
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -30278,10 +30554,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 16
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -1659.5549}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1899073948
 MonoBehaviour:
@@ -31302,7 +31578,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 500, y: 50}
+  m_SizeDelta: {x: 500, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1963047964
 MonoBehaviour:
@@ -31403,10 +31679,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 1
     m_MaxSize: 40
     m_Alignment: 4
     m_AlignByGeometry: 0
@@ -31575,7 +31851,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 50}
+  m_SizeDelta: {x: 0, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1982931450
 MonoBehaviour:
@@ -31609,7 +31885,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "Dominik\xE1nsk\xE1 9"
+  m_Text: "Dominik\xE1nsk\xE1 9\n  - DD"
 --- !u!222 &1982931451
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -32434,10 +32710,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -479.63}
+  m_SizeDelta: {x: 1725, y: 38}
   m_Pivot: {x: 0.5, y: 1}
 --- !u!114 &2016039611
 MonoBehaviour:
@@ -33416,7 +33692,7 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 16
     m_FontStyle: 0
     m_BestFit: 0
     m_MinSize: 1
@@ -33494,10 +33770,10 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 9481e32b30a71424388dc7fa2f08e2d0, type: 3}
-    m_FontSize: 14
+    m_FontSize: 20
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 10
+    m_MinSize: 2
     m_MaxSize: 40
     m_Alignment: 5
     m_AlignByGeometry: 0
@@ -33640,7 +33916,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 500, y: 50}
+  m_SizeDelta: {x: 500, y: 75}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &2074449105
 MonoBehaviour:
@@ -33960,7 +34236,7 @@ GameObject:
   - component: {fileID: 2093300009}
   - component: {fileID: 2093300008}
   m_Layer: 5
-  m_Name: Gap (4)
+  m_Name: '-'
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -33980,10 +34256,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 27
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 1725, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -2922.9644}
+  m_SizeDelta: {x: 1725, y: 28.13}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &2093300008
 MonoBehaviour:
@@ -34172,7 +34448,7 @@ GameObject:
   - component: {fileID: 2097123351}
   - component: {fileID: 2097123350}
   m_Layer: 5
-  m_Name: ToMap (2)
+  m_Name: Clear W BTN
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -34192,10 +34468,10 @@ RectTransform:
   m_Father: {fileID: 1641538590}
   m_RootOrder: 31
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 357, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 877.5, y: -3201.599}
+  m_SizeDelta: {x: 357, y: 90}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &2097123350
 MonoBehaviour:
diff --git a/Client/Client/Assets/Scripts/MapRenderer.cs b/Client/Client/Assets/Scripts/MapRenderer.cs
deleted file mode 100644
index 2f7e498..0000000
--- a/Client/Client/Assets/Scripts/MapRenderer.cs
+++ /dev/null
@@ -1,305 +0,0 @@
-﻿using System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.UI;
-
-public class MapRenderer : MonoBehaviour
-{
-    [SerializeField]
-    public SceneManager sceneManager;
-
-    [SerializeField]
-    public Canvas labelCanvas;
-
-    [SerializeField]
-    public GameObject labelPrefab;
-
-    [SerializeField]
-    public GameObject smallLabelPrefab;
-
-    [SerializeField]
-    private SpriteRenderer underlayTemplate;
-
-    [SerializeField]
-    private SpriteRenderer overlayTemplate;
-
-    [SerializeField]
-    public bool interactable = true;
-
-    [SerializeField]
-    private Material UIMaterial;
-
-    [SerializeField] 
-    private Material overlayMaterial;
-
-    [SerializeField] 
-    private Material notAvailableMaterial;
-
-    [SerializeField] 
-    private Material UINotAvailableMaterial;
-
-    
-    public Color minColor;
-
-    public Color maxColor;
-
-
-    private Vector3 startPos;
-
-    private Vector3 startScale;
-
-
-    public SpriteRenderer underlay;
-
-    private Dictionary<string, SpriteRenderer> overlay = new Dictionary<string, SpriteRenderer>();
-
-    private Dictionary<string, Image> overlay2 = new Dictionary<string, Image>();
-    
-    private bool first = true;
-
-
-    // Start is called before the first frame update
-    void Start()
-    {
-        startPos = transform.position;
-        startScale = transform.localScale;
-        
-        Load();
-        interactable = true;
-    }
-
-    void Update()
-    {
-        if (first)
-        {
-            first = false;
-
-            // Get source directory
-            string sourceDirectory = sceneManager.mapSourceDirectory;
-
-            // Get file with asset relative positions
-            TextAsset output = Resources.Load<TextAsset>($"{sourceDirectory}/output");
-
-            if (output == null)
-            {
-                Debug.Log($"Layout file missing at {sourceDirectory}/output.csv. Returning.");
-                return;
-            }
-
-            string[] lines = output.ToString().Split('\n');
-            List<string> filenamesTMP = new List<string>();
-
-            for (int i = 0; i < lines.Length; i++)
-            {
-                lines[i] = lines[i].Trim();
-                if (lines[i].Length != 0 && !lines[i].StartsWith("//"))
-                    filenamesTMP.Add(lines[i]);
-            }
-
-            lines = filenamesTMP.ToArray();
-
-            for (int i = 0; i < lines.Length; i++)
-            {
-                var split = lines[i].Split(';');
-
-                // Parse name minus the extension
-                // X - percent offset from left btm corner
-                // Y - percent offset from left btm corner
-                var name = split[0].Substring(0, split[0].Length - 4);
-                var xoff = float.Parse(split[1]);
-                var yoff = float.Parse(split[2]);
-                var xmed = float.Parse(split[3]);
-                var ymed = float.Parse(split[4]);
-
-                var img = overlay[name];
-
-                if (img != null)
-                {
-                    var bounds = underlay.bounds;
-                    var imgbounds = img.bounds;
-
-                    var xshift = -bounds.size.x / 2 + imgbounds.size.x / 2 + bounds.size.x * (xoff / 100);
-                    var yshift = -bounds.size.y / 2 + imgbounds.size.y / 2 + bounds.size.y * (yoff / 100);
-
-                    var xmedshift = -bounds.size.x / 2 + imgbounds.size.x / 2 + bounds.size.x * (xmed / 100);
-                    var ymedshift = -bounds.size.y / 2 + imgbounds.size.y / 2 + bounds.size.y * (ymed / 100);
-
-                    img.gameObject.transform.position = bounds.center + new Vector3(xshift, yshift, 0);
-
-                    var label = Instantiate(labelPrefab, labelCanvas.transform);
-                    var labelText = label.GetComponentInChildren<Text>();
-                    var labelPanel = label.gameObject.GetComponentInChildren<HorizontalLayoutGroup>();
-                    labelText.text = name.ToUpper();
-                    label.name = labelText.text;
-
-                    BuildingPanel.aliases.Add(name, img);
-
-                    for (int si = 5; si < split.Length; si++)
-                    {
-                        var smallLabel = Instantiate(smallLabelPrefab, labelPanel.transform);
-                        var smallLabelText = smallLabel.GetComponentInChildren<Text>();
-                        smallLabelText.text = split[si].ToUpper();
-                        smallLabel.name = smallLabelText.text;
-                        BuildingPanel.aliases.Add(split[si], img);
-                    }
-
-                    PositionUpdater posup = label.GetComponent<PositionUpdater>();
-                    posup.source = img.gameObject;
-
-                    RectTransform rect = label.GetComponent<RectTransform>();
-                    Vector3 newPosition = Camera.main.WorldToScreenPoint(bounds.center + new Vector3(xmedshift, ymedshift, 0));
-                    rect.position = newPosition;
-                }
-                else
-                {
-                    Debug.Log($"Error: Missing sprite {name}!");
-                }
-            }
-        }
-    }
-
-    /// <summary>
-    /// Loads map resources from an annotated directory
-    /// A "layout.txt" file with directory annotation is required
-    /// Creates the underlay map and building overlays addressable by their name as per the layout file
-    /// </summary>
-    /// <param name="sourceDirectory">Path to the source directory</param>
-    public void Load()
-    {
-        // Get source directory
-        string sourceDirectory = sceneManager.mapSourceDirectory;
-
-        // Load directory layout
-        // Read filenames
-        // First filename is the underlay
-        // All the others are the overlays, names as their respective building codes
-        TextAsset layout = Resources.Load<TextAsset>($"{sourceDirectory}/layout");
-
-        if (layout == null)
-        {
-            Debug.Log($"Layout file missing at {sourceDirectory}/layout.txt. Returning.");
-            return;
-        }
-
-        string[] filenames = layout.ToString().Split('\n');
-
-        // A map must contain at least an underlay
-        if (filenames.Length < 1)
-        {
-            Debug.Log("Attempted to load an empty map. Returning.");
-            return;
-        }
-
-        // Trim filenames (line breaks), remove empty line breaks and comments
-        List<string> filenamesTMP = new List<string>();
-        
-        for (int i = 0; i < filenames.Length; i++)
-        {
-            filenames[i] = filenames[i].Trim();
-            if (filenames[i].Length != 0 && !filenames[i].StartsWith("//"))
-                filenamesTMP.Add(filenames[i]);
-        }
-
-        filenames = filenamesTMP.ToArray();
-
-        // Load underlay sprite
-        Sprite underlaySprite = Resources.Load<Sprite>($"{sourceDirectory}/{filenames[0]}");
-
-        if (underlaySprite == null)
-        {
-            Debug.LogError($"Underlay sprite does not exist at path \"{sourceDirectory}/{filenames[0]}.png\". Returning.");
-            return;
-        }
-
-        // Load overlay sprites
-        Sprite[] overlaySprites = new Sprite[filenames.Length - 1];
-
-        for (int i = 1; i < filenames.Length; i++)
-        {
-            overlaySprites[i-1] = Resources.Load<Sprite>($"{sourceDirectory}/{filenames[i]}");
-            
-            if (overlaySprites[i - 1] == null)
-            {
-                Debug.LogError($"Overlay sprite does not exist at path \"{sourceDirectory}/{filenames[i]}.png\". Returning.");
-                return;
-            }
-        }
-
-        // Create game objects
-        underlay = Instantiate(underlayTemplate, transform);
-        underlay.name = "Underlay";
-        underlay.sprite = underlaySprite;
-
-        for (int i = 1; i < filenames.Length; i++)
-        {
-            overlay[filenames[i]] = Instantiate(overlayTemplate, transform);
-            overlay[filenames[i]].name = filenames[i];
-            overlay[filenames[i]].sprite = overlaySprites[i - 1];
-            overlay[filenames[i]].sortingOrder = i;
-        }
-
-        // Get references to remaining building sprites
-        BuildingTag[] images = (FindObjectsOfType(typeof(BuildingTag)) as BuildingTag[]);
-        foreach (var building in images)
-        {
-            overlay2[building.builidngName] = building.GetComponent<Image>();
-            //Debug.Log(building.builidngName);
-        }
-    }
-
-    public void SetColors(double[] predictions)
-    {
-        var buildings = Buildings.buildings;
-
-        if (predictions.Length != buildings.Length)
-        {
-            Debug.LogError("Mismatch in prediction and building count.");
-            return;
-        }
-
-        for (int i = 0; i < buildings.Length; i++)
-        {
-            if (predictions[i] < 0)
-            {
-                if (overlay.ContainsKey(buildings[i]))
-                {
-                    overlay[buildings[i]].material = notAvailableMaterial;
-
-                }
-                else if (overlay2.ContainsKey(buildings[i]))
-                {
-                    overlay2[buildings[i]].material = UINotAvailableMaterial;
-                }
-            }
-
-            else
-            {
-                if (overlay.ContainsKey(buildings[i]))
-                {
-                    float a = overlay[buildings[i]].color.a;
-                    var c = Color.Lerp(minColor, maxColor, (float)predictions[i] / 100f);
-                    c.a = a;
-                    overlay[buildings[i]].color = c;
-                    overlay[buildings[i]].material = overlayMaterial;
-                }
-
-                else if (overlay2.ContainsKey(buildings[i]))
-                {
-                    RectTransform rt = overlay2[buildings[i]].GetComponent(typeof(RectTransform)) as RectTransform;
-                    rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 25 + (200 * ((float)predictions[i] / 100f)));
-                    rt.ForceUpdateRectTransforms();
-
-                    float a = overlay2[buildings[i]].color.a;
-                    var c = Color.Lerp(minColor, maxColor, (float)predictions[i] / 100f);
-                    c.a = a;
-                    overlay2[buildings[i]].color = c;
-                    overlay2[buildings[i]].material = UIMaterial;
-                }
-
-            }
-        }
-
-    }
-
-}
diff --git a/Client/Client/Assets/Scripts/MapRenderer.cs.meta b/Client/Client/Assets/Scripts/MapRenderer.cs.meta
deleted file mode 100644
index 5a66257..0000000
--- a/Client/Client/Assets/Scripts/MapRenderer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 03f66542357dc45478e44afc56b689fe
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/Model/Buildings.cs b/Client/Client/Assets/Scripts/Model/Buildings.cs
index f902534..6d30cdf 100644
--- a/Client/Client/Assets/Scripts/Model/Buildings.cs
+++ b/Client/Client/Assets/Scripts/Model/Buildings.cs
@@ -2,9 +2,18 @@
 using System.Collections.Generic;
 using UnityEngine;
 
+/// <summary>
+/// All available building names
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public class Buildings
 {
 
+    /// <summary>
+    /// All building names
+    /// </summary>
     public static string[] buildings = new string[] {
         "FST+FEK", "FDU", "FAV", "FEL", "REK", "MENZA", "LIB", "CIV", "UNI14",
         "DOM", "HUS", "CHOD", "JUNG", "KLAT", "KOLL", "RIEG", "SADY", "SED+VEL",
diff --git a/Client/Client/Assets/Scripts/Model/Date.cs b/Client/Client/Assets/Scripts/Model/Date.cs
index 622fbb4..9e5d24e 100644
--- a/Client/Client/Assets/Scripts/Model/Date.cs
+++ b/Client/Client/Assets/Scripts/Model/Date.cs
@@ -4,25 +4,54 @@ using UnityEngine;
 using System.Xml.Serialization;
 using System;
 
+/// <summary>
+/// Date representation
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public class Date : IComparable<Date>
 {
+    /// <summary>
+    /// Day start
+    /// </summary>
 	[XmlIgnore]
     public static int MIN_HOUR = 7;
+    
+    /// <summary>
+    /// Day end
+    /// </summary>
     [XmlIgnore]
     public static int MAX_HOUR = 18;
 
+    /// <summary>
+    /// Day number
+    /// </summary>
     [XmlElement]
     public int day;
     
+    /// <summary>
+    /// Month number
+    /// </summary>
     [XmlElement]
     public int month;
     
+    /// <summary>
+    /// Year number
+    /// </summary>
     [XmlElement]
     public int year;
 
+    /// <summary>
+    /// Hour number
+    /// </summary>
     [XmlElement]
     public int hour;
 
+    /// <summary>
+    /// Creates a random date
+    /// </summary>
+    /// <returns>A random date</returns>
     public static Date Randomize()
     {
         Date d = new Date();
@@ -35,6 +64,10 @@ public class Date : IComparable<Date>
         return d;
     }
 
+    /// <summary>
+    /// Clones an existing date
+    /// </summary>
+    /// <returns>A deep clone</returns>
     public Date Clone()
     {
         Date clone = new Date();
@@ -45,6 +78,11 @@ public class Date : IComparable<Date>
         return clone;
     }
 
+    /// <summary>
+    /// Compares two dates
+    /// </summary>
+    /// <param name="other">Date to compare to</param>
+    /// <returns> -1 if this instance is less than other, 0 if they are equal, and 1 otherwise</returns>
     public int CompareTo(Date other)
     {
         if (year < other.year) return -1;
diff --git a/Client/Client/Assets/Scripts/Model/DateTimeManager.cs b/Client/Client/Assets/Scripts/Model/DateTimeManager.cs
index 8d516b6..78b5b3c 100644
--- a/Client/Client/Assets/Scripts/Model/DateTimeManager.cs
+++ b/Client/Client/Assets/Scripts/Model/DateTimeManager.cs
@@ -4,29 +4,67 @@ using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
+/// <summary>
+/// Manages time relates application state
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public class DateTimeManager : MonoBehaviour, DateTimeObserver
 {
+    /// <summary>
+    /// Months as strings
+    /// </summary>
     public string[] months = new string[]
     {
         "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"
     };
 
+    /// <summary>
+    /// Observes to changes in the date
+    /// </summary>
     public List<DateTimeObserver> observers = new List<DateTimeObserver>();
 
+    /// <summary>
+    /// Date as text
+    /// </summary>
     public Text date;
+
+    /// <summary>
+    /// Day as text
+    /// </summary>
     public Text dayOfWeek;
 
+    /// <summary>
+    /// Current date
+    /// </summary>
     public Date currentDate;
+
+    /// <summary>
+    /// Simulation start date
+    /// </summary>
     public Date startDate;
+
+    /// <summary>
+    /// Simulation end date
+    /// </summary>
     public Date endDate;
+
+    /// <summary>
+    /// Day of the week
+    /// </summary>
     public DayOfWeek day;
 
+    // Start is ran when the application starts
     void Start()
     {
         RegisterObserver(this);
         ResetDate();
     }
 
+    /// <summary>
+    /// Resets the state to current time
+    /// </summary>
     public void ResetDate()
     {
         currentDate = new Date();
@@ -43,6 +81,12 @@ public class DateTimeManager : MonoBehaviour, DateTimeObserver
             observer.Notify(startDate, currentDate, endDate);
     }
 
+    /// <summary>
+    /// Sets the dates
+    /// </summary>
+    /// <param name="currentDate">Current date</param>
+    /// <param name="startDate">Simulation start</param>
+    /// <param name="endDate">Simulation end</param>
     public void SetDates(Date currentDate, Date startDate, Date endDate)
     {
         this.currentDate = currentDate;
@@ -57,11 +101,21 @@ public class DateTimeManager : MonoBehaviour, DateTimeObserver
         }
     }
 
+    /// <summary>
+    /// Register a datetime state observer
+    /// </summary>
+    /// <param name="observer"></param>
     public void RegisterObserver(DateTimeObserver observer)
     {
         observers.Add(observer);
     }
 
+    /// <summary>
+    /// Notify self
+    /// </summary>
+    /// <param name="currentDate">Current date</param>
+    /// <param name="startDate">Simulation start</param>
+    /// <param name="endDate">Simulation end</param>
     public void Notify(Date startDate, Date currentDate, Date endDate)
     {
         date.text = $"{months[currentDate.month - 1]} / {currentDate.day} / {currentDate.year}";
diff --git a/Client/Client/Assets/Scripts/Model/DateTimeObserver.cs b/Client/Client/Assets/Scripts/Model/DateTimeObserver.cs
index 4ab717a..f70e532 100644
--- a/Client/Client/Assets/Scripts/Model/DateTimeObserver.cs
+++ b/Client/Client/Assets/Scripts/Model/DateTimeObserver.cs
@@ -2,7 +2,19 @@
 using System.Collections.Generic;
 using UnityEngine;
 
+/// <summary>
+/// DateTimeObserver Interface
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public interface DateTimeObserver
 {
+    /// <summary>
+    /// Must be able to process date change notifications
+    /// </summary>
+    /// <param name="currentDate">Current date</param>
+    /// <param name="startDate">Simulation start</param>
+    /// <param name="endDate">Simulation end</param>
     void Notify(Date startDate, Date currentDate, Date endDate);
 }
diff --git a/Client/Client/Assets/Scripts/Model/Prediction.cs b/Client/Client/Assets/Scripts/Model/Prediction.cs
index 8559a1c..7dd5e48 100644
--- a/Client/Client/Assets/Scripts/Model/Prediction.cs
+++ b/Client/Client/Assets/Scripts/Model/Prediction.cs
@@ -3,11 +3,23 @@ using System.Collections.Generic;
 using UnityEngine;
 using System.Xml.Serialization;
 
+/// <summary>
+/// Prediction data
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public class Prediction
 {
+    /// <summary>
+    /// Date of prediction
+    /// </summary>
     [XmlElement]
     public Date dateTime;
 
+    /// <summary>
+    /// Predicted rush levels
+    /// </summary>
     [XmlArray("rushLevels")]
     [XmlArrayItem("rushLevel")]
     public double[] predictions;
diff --git a/Client/Client/Assets/Scripts/Model/Request.cs b/Client/Client/Assets/Scripts/Model/Request.cs
index 96e731c..b73a7eb 100644
--- a/Client/Client/Assets/Scripts/Model/Request.cs
+++ b/Client/Client/Assets/Scripts/Model/Request.cs
@@ -5,37 +5,69 @@ using System.Xml.Serialization;
 using System;
 using ServerApp.Parser.OutputInfo;
 
+/// <summary>
+/// Request data
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 [XmlRoot("Request")]
 public class Request
 {
+    /// <summary>
+    /// True to use weather set by user
+    /// </summary>
     [XmlElement]
     public bool useWeather;
 
-
+    /// <summary>
+    /// Temperature to use
+    /// </summary>
     [XmlElement]
     public double temperature;
     
+    /// <summary>
+    /// Eind speed to use
+    /// </summary>
     [XmlElement]
     public double wind;
     
+    /// <summary>
+    /// Rain chance to use
+    /// </summary>
     [XmlElement]
     public double rain;
 
+    /// <summary>
+    /// Weather condition to use
+    /// </summary>
     [XmlElement]
     public WeatherConditions weather;
 
 
+    /// <summary>
+    /// True to set a time span, false otherwise
+    /// </summary>
     [XmlElement]
     public bool useEndDate;
 
 
+    /// <summary>
+    /// Prediction start date
+    /// </summary>
     [XmlElement]
     public Date start;
 
+    /// <summary>
+    /// Prediction end date
+    /// </summary>
     [XmlElement]
     public Date end;
 
-
+    /// <summary>
+    /// Creates a random request
+    /// </summary>
+    /// <returns>A random request</returns>
     public static Request Randomize()
     {
         Request r = new Request();
diff --git a/Client/Client/Assets/Scripts/Model/Response.cs b/Client/Client/Assets/Scripts/Model/Response.cs
index d391ced..11ab201 100644
--- a/Client/Client/Assets/Scripts/Model/Response.cs
+++ b/Client/Client/Assets/Scripts/Model/Response.cs
@@ -4,16 +4,32 @@ using UnityEngine;
 using System.Xml.Serialization;
 using System.IO;
 
+/// <summary>
+/// Response data
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 [XmlRoot("Response")]
 public class Response
 {
+    /// <summary>
+    /// Hours per prediction segment
+    /// </summary>
     [XmlElement]
     public int hoursPerSegment;
 
+    /// <summary>
+    /// Rush predictions
+    /// </summary>
     [XmlArray("predictions")]
     [XmlArrayItem("prediction")]
     public Prediction[] predicitons;
 
+    /// <summary>
+    /// Creates a random response
+    /// </summary>
+    /// <returns>A random response</returns>
     public static Response Randomize()
     {
         Response r = new Response();
diff --git a/Client/Client/Assets/Scripts/Model/XmlCommunication.cs b/Client/Client/Assets/Scripts/Model/XmlCommunication.cs
index ef35696..9e10634 100644
--- a/Client/Client/Assets/Scripts/Model/XmlCommunication.cs
+++ b/Client/Client/Assets/Scripts/Model/XmlCommunication.cs
@@ -4,8 +4,20 @@ using UnityEngine;
 using System.Xml.Serialization;
 using System.IO;
 
+/// <summary>
+/// Serialization tools
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public class XmlCommunication
 {
+    /// <summary>
+    /// Serializes to a string
+    /// </summary>
+    /// <typeparam name="T">Type to serialize</typeparam>
+    /// <param name="toSerialize">Item to serialize</param>
+    /// <returns>Item as serialized string</returns>
     public static string Serialize<T>(T toSerialize)
     {
         var xml = new XmlSerializer(toSerialize.GetType());
@@ -17,6 +29,12 @@ public class XmlCommunication
         }
     }
 
+    /// <summary>
+    /// Deserializes from a string
+    /// </summary>
+    /// <typeparam name="T">Type to deserialize from string</typeparam>
+    /// <param name="xmlString">String to deserialize</param>
+    /// <returns>An instance of type T deserialized from a given string</returns>
     public static T Deserialize<T>(string xmlString)
     {
         using (var stream = new StringReader(xmlString))
diff --git a/Client/Client/Assets/Scripts/NetworkingManager.cs b/Client/Client/Assets/Scripts/NetworkingManager.cs
deleted file mode 100644
index be012be..0000000
--- a/Client/Client/Assets/Scripts/NetworkingManager.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-﻿using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.Networking;
-using System.Security.Cryptography.X509Certificates;
-
-public class NetworkingManager : MonoBehaviour
-{
-    public RushManager rushManager;
-    
-    public string uri = "https://147.228.173.54:10000/";
-
-    public void StartPost(Request request)
-    {
-        StartCoroutine(Post(uri, XmlCommunication.Serialize(request)));
-
-        // Mock response:
-        // StartCoroutine(Get(uri));
-    }
-
-    public void StartGet()
-    {
-        StartCoroutine(Get(uri));
-    }
-
-    public void StartWeatherGet(WeatherProvider weatherProvider, string uri)
-    {
-        StartCoroutine(WeatherGet(weatherProvider, uri));
-    }
-
-    IEnumerator Post(string uri, string toPost)
-    {
-        Debug.Log("Uploading: " + toPost);
-        UnityWebRequest www = UnityWebRequest.Post(uri, toPost);
-        www.certificateHandler = new AcceptAllCertificates();
-        yield return www.SendWebRequest();
-
-        if (www.isNetworkError || www.isHttpError)
-        {
-            Debug.Log(www.error);
-        }
-        else
-        {
-            // Show results as text
-            Debug.Log("Upload complete!");
-
-            var xml = www.downloadHandler.text;
-
-            Debug.Log(xml);
-
-            rushManager.SetResponse(XmlCommunication.Deserialize<Response>(xml));
-
-            Debug.Log("Response received!");
-        }
-    }
-
-    IEnumerator Get(string uri)
-    {
-        Debug.Log("Downloading...");
-        UnityWebRequest www = UnityWebRequest.Get(uri);
-        www.certificateHandler = new AcceptAllCertificates();
-        yield return www.SendWebRequest();
-
-        if (www.isNetworkError || www.isHttpError)
-        {
-            Debug.Log(www.error);
-        }
-        else
-        {
-            // Show results as text
-            var xml = www.downloadHandler.text;
-            rushManager.SetResponse(XmlCommunication.Deserialize<Response>(xml));
-            Debug.Log(xml);
-        }
-    }
-
-    IEnumerator WeatherGet(WeatherProvider weatherProvider, string uri)
-    {
-        Debug.Log("Downloading weather...");
-        UnityWebRequest www = UnityWebRequest.Get(uri);
-        www.certificateHandler = new AcceptAllCertificates();
-        yield return www.SendWebRequest();
-
-        if (www.isNetworkError || www.isHttpError)
-        {
-            Debug.Log(www.error);
-        }
-        else
-        {
-            // Show results as text
-            var weather = www.downloadHandler.text;
-            weatherProvider.LoadFromResponse(weather);
-            Debug.Log(weather);
-        }
-    }
-
-    public class AcceptAllCertificates : CertificateHandler
-    {
-        protected override bool ValidateCertificate(byte[] certificateData)
-        {
-            return true;
-        }
-    }
-}
diff --git a/Client/Client/Assets/Scripts/NetworkingManager.cs.meta b/Client/Client/Assets/Scripts/NetworkingManager.cs.meta
deleted file mode 100644
index 572a696..0000000
--- a/Client/Client/Assets/Scripts/NetworkingManager.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 293c714f76f64e2409990ec2bc9368c6
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/RushManager.cs b/Client/Client/Assets/Scripts/RushManager.cs
deleted file mode 100644
index 568cc80..0000000
--- a/Client/Client/Assets/Scripts/RushManager.cs
+++ /dev/null
@@ -1,211 +0,0 @@
-﻿using System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class RushManager : MonoBehaviour
-{
-    private DateTimeManager dateTimeManager;
-    private WeatherManager weatherManager;
-    public NetworkingManager networkingManager;
-    public MapRenderer mapRenderer;
-
-    private Request request;
-    private Response response;
-
-    private Prediction currentPrediction;
-    public int predictionIndex;
-
-    public bool playing = false;
-    private bool loading = false;
-
-    public Animator loadingAnimator;
-
-    public float timePerSegment = 1f;
-    public float timer;
-
-    // Start is called before the first frame update
-    void Start()
-    {
-        dateTimeManager = GetComponent<DateTimeManager>();
-        weatherManager = GetComponent<WeatherManager>();
-    }
-
-    // Update is called once per frame
-    void Update()
-    {
-        // No request made yet, no response received
-        // If there is no request and no response, new request should be made
-        if (request == null && response == null)
-        {
-            request = new Request();
-            request.start = dateTimeManager.currentDate;
-            weatherManager.SetWeather(request);
-            networkingManager.StartPost(request);
-        }
-        
-        // No request, response received - playing animation
-        else if (request == null && response != null)
-        {
-            if (loading)
-            {
-                loading = false;
-                if (loadingAnimator != null) 
-                    loadingAnimator.SetBool("loading", loading);
-            }
-
-            if (playing)
-            {
-                timer -= Time.deltaTime;
-                if (timer < 0)
-                {
-                    timer = timePerSegment;
-
-                    if (predictionIndex + 1 < response.predicitons.Length)
-                    {
-                        Next();
-                        playing = true; //  Correct for Next() setting playing = false
-                    }
-                    else
-                    {
-                        playing = false;
-                    }
-                }
-            }
-        }
-
-        // Request made, waiting for response
-        else if (request != null && response == null)
-        {
-            // Play loading animation
-            if (!loading)
-            {
-                loading = true;
-                if (loadingAnimator != null) 
-                    loadingAnimator.SetBool("loading", loading);
-                mapRenderer.SetColors(new double[Buildings.buildings.Length]);
-            }
-            //Debug.Log("Loading...");
-        }
-
-        else if (request != null && response != null)
-        {
-            Debug.LogError("Coexisting request and response. This should never happen.");
-        }
-
-    }
-
-    public void SetResponse(Response response)
-    {
-        this.request = null;
-        this.response = response;
-        currentPrediction = response.predicitons[0];
-        predictionIndex = 0;
-        Redraw();
-    }
-
-    public void CreateRequest(Date startDate, Date endDate, bool useOwnWeather)
-    {
-        this.response = null;
-        
-        request = new Request();
-        request.start = startDate;
-        request.useEndDate = endDate != null;
-        request.end = endDate;
-
-        weatherManager.SetWeather(request, useOwnWeather);
-        networkingManager.StartPost(request);
-    }
-
-    public void Play(bool play)
-    {
-        // Works as a play/pause toggle
-        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
-        playing = play;
-        timer = timePerSegment;
-
-        if (predictionIndex + 1 == response.predicitons.Length)
-        {
-            predictionIndex = 0;
-            currentPrediction = response.predicitons[0];
-            Redraw();
-        }
-    }
-
-    public void First()
-    {
-        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
-
-        playing = false;
-        currentPrediction = response.predicitons[0];
-        predictionIndex = 0;
-        Redraw();
-    }
-
-    public void Last()
-    {
-        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
-
-        playing = false;
-        currentPrediction = response.predicitons[response.predicitons.Length - 1];
-        predictionIndex = response.predicitons.Length - 1;
-        Redraw();
-    }
-
-    public void Previous()
-    {
-        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
-        
-        playing = false;
-
-        int newIndex = predictionIndex - 1;
-
-        if (newIndex == -1)
-            return;
-        predictionIndex = newIndex;
-        currentPrediction = response.predicitons[predictionIndex];
-        Redraw();
-    }
-
-    public void Next()
-    {
-        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
-        
-        playing = false;
-
-        int newIndex = predictionIndex + 1;
-        if (newIndex == response.predicitons.Length)
-            return;
-        predictionIndex = newIndex;
-        currentPrediction = response.predicitons[predictionIndex];
-        Redraw();
-    }
-
-    public void ResetRush()
-    {
-        playing = false;
-        response = null;
-        currentPrediction = null;
-        predictionIndex = -1;
-        // If there is no request and no response, new request should be made in Update
-    }
-
-    public float GetProgress()
-    {
-        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return 0f; }
-
-        if ((response.predicitons.Length - 1) == 0) return 1.0f;
-        return predictionIndex / (float)(response.predicitons.Length - 1);
-    }
-
-    private void Redraw()
-    {
-        var firstPred = response.predicitons[0];
-        var lastPred = response.predicitons[response.predicitons.Length-1];
-
-        dateTimeManager.SetDates(currentPrediction.dateTime, firstPred.dateTime, lastPred.dateTime);
-        weatherManager.SetDateTime(currentPrediction.dateTime);
-        mapRenderer.SetColors(currentPrediction.predictions);
-    }
-
-}
diff --git a/Client/Client/Assets/Scripts/RushManager.cs.meta b/Client/Client/Assets/Scripts/RushManager.cs.meta
deleted file mode 100644
index 18e0dbe..0000000
--- a/Client/Client/Assets/Scripts/RushManager.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 7aaba704d6fddc649b36d23259367344
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/SceneManager.cs b/Client/Client/Assets/Scripts/SceneManager.cs
deleted file mode 100644
index fa698d2..0000000
--- a/Client/Client/Assets/Scripts/SceneManager.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-﻿using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class SceneManager : MonoBehaviour
-{
-    [SerializeField]
-    public string mapSourceDirectory;
-
-    public GameObject weatherPanel;
-    public GameObject datePanel;
-    public GameObject buildingPanel;
-    public GameObject animationPanel;
-    public GameObject aboutPanel;
-
-    public bool first;
-
-    // Start is called before the first frame update
-    void Start()
-    {
-        first = true;
-        weatherPanel.SetActive(true);
-        datePanel.SetActive(true);
-        buildingPanel.SetActive(true);
-        animationPanel.SetActive(true);
-        aboutPanel.SetActive(true);
-    }
-
-    // Update is called once per frame
-    void Update()
-    {
-        if (first)
-        {
-            weatherPanel.SetActive(false);
-            datePanel.SetActive(false);
-            buildingPanel.SetActive(false);
-            animationPanel.SetActive(false);
-            aboutPanel.SetActive(false);
-            first = false;
-        }
-    }
-}
diff --git a/Client/Client/Assets/Scripts/SceneManager.cs.meta b/Client/Client/Assets/Scripts/SceneManager.cs.meta
deleted file mode 100644
index 2614067..0000000
--- a/Client/Client/Assets/Scripts/SceneManager.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 833f84acfa541974ebffb9dab10cb27c
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/UI/AliasDropdownItem.cs b/Client/Client/Assets/Scripts/UI/AliasDropdownItem.cs
new file mode 100644
index 0000000..521ab46
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/AliasDropdownItem.cs
@@ -0,0 +1,42 @@
+﻿using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.UI;
+
+public class AliasDropdownItem : MonoBehaviour
+{
+    public Toggle toggle;
+    public Text text;
+    public InputField input;
+    public BuildingPanel panel;
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        toggle = GetComponent<Toggle>();
+        text = GetComponentInChildren<Text>();
+
+        toggle.onValueChanged.AddListener((isSelected) =>
+        {
+            if (isSelected) 
+            { 
+                input.text = text.text;
+
+                panel.findBuildingButton.interactable = false;
+
+                foreach (string alias in BuildingPanel.aliases.Keys)
+                {
+                    if (alias.ToLower().Trim() == input.text.ToLower())
+                    {
+                        panel.findBuildingButton.interactable = true;
+                        return;
+                    }
+                }
+
+            }
+        });
+    }
+
+}
\ No newline at end of file
diff --git a/Client/Client/Assets/Scripts/UI/AliasDropdownItem.cs.meta b/Client/Client/Assets/Scripts/UI/AliasDropdownItem.cs.meta
new file mode 100644
index 0000000..4f29246
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/AliasDropdownItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b3e7f9cfae510d146a3c0fc34d5f21ea
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/UI/MapRenderer.cs b/Client/Client/Assets/Scripts/UI/MapRenderer.cs
new file mode 100644
index 0000000..2f7e498
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/MapRenderer.cs
@@ -0,0 +1,305 @@
+﻿using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class MapRenderer : MonoBehaviour
+{
+    [SerializeField]
+    public SceneManager sceneManager;
+
+    [SerializeField]
+    public Canvas labelCanvas;
+
+    [SerializeField]
+    public GameObject labelPrefab;
+
+    [SerializeField]
+    public GameObject smallLabelPrefab;
+
+    [SerializeField]
+    private SpriteRenderer underlayTemplate;
+
+    [SerializeField]
+    private SpriteRenderer overlayTemplate;
+
+    [SerializeField]
+    public bool interactable = true;
+
+    [SerializeField]
+    private Material UIMaterial;
+
+    [SerializeField] 
+    private Material overlayMaterial;
+
+    [SerializeField] 
+    private Material notAvailableMaterial;
+
+    [SerializeField] 
+    private Material UINotAvailableMaterial;
+
+    
+    public Color minColor;
+
+    public Color maxColor;
+
+
+    private Vector3 startPos;
+
+    private Vector3 startScale;
+
+
+    public SpriteRenderer underlay;
+
+    private Dictionary<string, SpriteRenderer> overlay = new Dictionary<string, SpriteRenderer>();
+
+    private Dictionary<string, Image> overlay2 = new Dictionary<string, Image>();
+    
+    private bool first = true;
+
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        startPos = transform.position;
+        startScale = transform.localScale;
+        
+        Load();
+        interactable = true;
+    }
+
+    void Update()
+    {
+        if (first)
+        {
+            first = false;
+
+            // Get source directory
+            string sourceDirectory = sceneManager.mapSourceDirectory;
+
+            // Get file with asset relative positions
+            TextAsset output = Resources.Load<TextAsset>($"{sourceDirectory}/output");
+
+            if (output == null)
+            {
+                Debug.Log($"Layout file missing at {sourceDirectory}/output.csv. Returning.");
+                return;
+            }
+
+            string[] lines = output.ToString().Split('\n');
+            List<string> filenamesTMP = new List<string>();
+
+            for (int i = 0; i < lines.Length; i++)
+            {
+                lines[i] = lines[i].Trim();
+                if (lines[i].Length != 0 && !lines[i].StartsWith("//"))
+                    filenamesTMP.Add(lines[i]);
+            }
+
+            lines = filenamesTMP.ToArray();
+
+            for (int i = 0; i < lines.Length; i++)
+            {
+                var split = lines[i].Split(';');
+
+                // Parse name minus the extension
+                // X - percent offset from left btm corner
+                // Y - percent offset from left btm corner
+                var name = split[0].Substring(0, split[0].Length - 4);
+                var xoff = float.Parse(split[1]);
+                var yoff = float.Parse(split[2]);
+                var xmed = float.Parse(split[3]);
+                var ymed = float.Parse(split[4]);
+
+                var img = overlay[name];
+
+                if (img != null)
+                {
+                    var bounds = underlay.bounds;
+                    var imgbounds = img.bounds;
+
+                    var xshift = -bounds.size.x / 2 + imgbounds.size.x / 2 + bounds.size.x * (xoff / 100);
+                    var yshift = -bounds.size.y / 2 + imgbounds.size.y / 2 + bounds.size.y * (yoff / 100);
+
+                    var xmedshift = -bounds.size.x / 2 + imgbounds.size.x / 2 + bounds.size.x * (xmed / 100);
+                    var ymedshift = -bounds.size.y / 2 + imgbounds.size.y / 2 + bounds.size.y * (ymed / 100);
+
+                    img.gameObject.transform.position = bounds.center + new Vector3(xshift, yshift, 0);
+
+                    var label = Instantiate(labelPrefab, labelCanvas.transform);
+                    var labelText = label.GetComponentInChildren<Text>();
+                    var labelPanel = label.gameObject.GetComponentInChildren<HorizontalLayoutGroup>();
+                    labelText.text = name.ToUpper();
+                    label.name = labelText.text;
+
+                    BuildingPanel.aliases.Add(name, img);
+
+                    for (int si = 5; si < split.Length; si++)
+                    {
+                        var smallLabel = Instantiate(smallLabelPrefab, labelPanel.transform);
+                        var smallLabelText = smallLabel.GetComponentInChildren<Text>();
+                        smallLabelText.text = split[si].ToUpper();
+                        smallLabel.name = smallLabelText.text;
+                        BuildingPanel.aliases.Add(split[si], img);
+                    }
+
+                    PositionUpdater posup = label.GetComponent<PositionUpdater>();
+                    posup.source = img.gameObject;
+
+                    RectTransform rect = label.GetComponent<RectTransform>();
+                    Vector3 newPosition = Camera.main.WorldToScreenPoint(bounds.center + new Vector3(xmedshift, ymedshift, 0));
+                    rect.position = newPosition;
+                }
+                else
+                {
+                    Debug.Log($"Error: Missing sprite {name}!");
+                }
+            }
+        }
+    }
+
+    /// <summary>
+    /// Loads map resources from an annotated directory
+    /// A "layout.txt" file with directory annotation is required
+    /// Creates the underlay map and building overlays addressable by their name as per the layout file
+    /// </summary>
+    /// <param name="sourceDirectory">Path to the source directory</param>
+    public void Load()
+    {
+        // Get source directory
+        string sourceDirectory = sceneManager.mapSourceDirectory;
+
+        // Load directory layout
+        // Read filenames
+        // First filename is the underlay
+        // All the others are the overlays, names as their respective building codes
+        TextAsset layout = Resources.Load<TextAsset>($"{sourceDirectory}/layout");
+
+        if (layout == null)
+        {
+            Debug.Log($"Layout file missing at {sourceDirectory}/layout.txt. Returning.");
+            return;
+        }
+
+        string[] filenames = layout.ToString().Split('\n');
+
+        // A map must contain at least an underlay
+        if (filenames.Length < 1)
+        {
+            Debug.Log("Attempted to load an empty map. Returning.");
+            return;
+        }
+
+        // Trim filenames (line breaks), remove empty line breaks and comments
+        List<string> filenamesTMP = new List<string>();
+        
+        for (int i = 0; i < filenames.Length; i++)
+        {
+            filenames[i] = filenames[i].Trim();
+            if (filenames[i].Length != 0 && !filenames[i].StartsWith("//"))
+                filenamesTMP.Add(filenames[i]);
+        }
+
+        filenames = filenamesTMP.ToArray();
+
+        // Load underlay sprite
+        Sprite underlaySprite = Resources.Load<Sprite>($"{sourceDirectory}/{filenames[0]}");
+
+        if (underlaySprite == null)
+        {
+            Debug.LogError($"Underlay sprite does not exist at path \"{sourceDirectory}/{filenames[0]}.png\". Returning.");
+            return;
+        }
+
+        // Load overlay sprites
+        Sprite[] overlaySprites = new Sprite[filenames.Length - 1];
+
+        for (int i = 1; i < filenames.Length; i++)
+        {
+            overlaySprites[i-1] = Resources.Load<Sprite>($"{sourceDirectory}/{filenames[i]}");
+            
+            if (overlaySprites[i - 1] == null)
+            {
+                Debug.LogError($"Overlay sprite does not exist at path \"{sourceDirectory}/{filenames[i]}.png\". Returning.");
+                return;
+            }
+        }
+
+        // Create game objects
+        underlay = Instantiate(underlayTemplate, transform);
+        underlay.name = "Underlay";
+        underlay.sprite = underlaySprite;
+
+        for (int i = 1; i < filenames.Length; i++)
+        {
+            overlay[filenames[i]] = Instantiate(overlayTemplate, transform);
+            overlay[filenames[i]].name = filenames[i];
+            overlay[filenames[i]].sprite = overlaySprites[i - 1];
+            overlay[filenames[i]].sortingOrder = i;
+        }
+
+        // Get references to remaining building sprites
+        BuildingTag[] images = (FindObjectsOfType(typeof(BuildingTag)) as BuildingTag[]);
+        foreach (var building in images)
+        {
+            overlay2[building.builidngName] = building.GetComponent<Image>();
+            //Debug.Log(building.builidngName);
+        }
+    }
+
+    public void SetColors(double[] predictions)
+    {
+        var buildings = Buildings.buildings;
+
+        if (predictions.Length != buildings.Length)
+        {
+            Debug.LogError("Mismatch in prediction and building count.");
+            return;
+        }
+
+        for (int i = 0; i < buildings.Length; i++)
+        {
+            if (predictions[i] < 0)
+            {
+                if (overlay.ContainsKey(buildings[i]))
+                {
+                    overlay[buildings[i]].material = notAvailableMaterial;
+
+                }
+                else if (overlay2.ContainsKey(buildings[i]))
+                {
+                    overlay2[buildings[i]].material = UINotAvailableMaterial;
+                }
+            }
+
+            else
+            {
+                if (overlay.ContainsKey(buildings[i]))
+                {
+                    float a = overlay[buildings[i]].color.a;
+                    var c = Color.Lerp(minColor, maxColor, (float)predictions[i] / 100f);
+                    c.a = a;
+                    overlay[buildings[i]].color = c;
+                    overlay[buildings[i]].material = overlayMaterial;
+                }
+
+                else if (overlay2.ContainsKey(buildings[i]))
+                {
+                    RectTransform rt = overlay2[buildings[i]].GetComponent(typeof(RectTransform)) as RectTransform;
+                    rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 25 + (200 * ((float)predictions[i] / 100f)));
+                    rt.ForceUpdateRectTransforms();
+
+                    float a = overlay2[buildings[i]].color.a;
+                    var c = Color.Lerp(minColor, maxColor, (float)predictions[i] / 100f);
+                    c.a = a;
+                    overlay2[buildings[i]].color = c;
+                    overlay2[buildings[i]].material = UIMaterial;
+                }
+
+            }
+        }
+
+    }
+
+}
diff --git a/Client/Client/Assets/Scripts/UI/MapRenderer.cs.meta b/Client/Client/Assets/Scripts/UI/MapRenderer.cs.meta
new file mode 100644
index 0000000..5a66257
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/MapRenderer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 03f66542357dc45478e44afc56b689fe
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/UI/NetworkingManager.cs b/Client/Client/Assets/Scripts/UI/NetworkingManager.cs
new file mode 100644
index 0000000..be012be
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/NetworkingManager.cs
@@ -0,0 +1,104 @@
+﻿using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Networking;
+using System.Security.Cryptography.X509Certificates;
+
+public class NetworkingManager : MonoBehaviour
+{
+    public RushManager rushManager;
+    
+    public string uri = "https://147.228.173.54:10000/";
+
+    public void StartPost(Request request)
+    {
+        StartCoroutine(Post(uri, XmlCommunication.Serialize(request)));
+
+        // Mock response:
+        // StartCoroutine(Get(uri));
+    }
+
+    public void StartGet()
+    {
+        StartCoroutine(Get(uri));
+    }
+
+    public void StartWeatherGet(WeatherProvider weatherProvider, string uri)
+    {
+        StartCoroutine(WeatherGet(weatherProvider, uri));
+    }
+
+    IEnumerator Post(string uri, string toPost)
+    {
+        Debug.Log("Uploading: " + toPost);
+        UnityWebRequest www = UnityWebRequest.Post(uri, toPost);
+        www.certificateHandler = new AcceptAllCertificates();
+        yield return www.SendWebRequest();
+
+        if (www.isNetworkError || www.isHttpError)
+        {
+            Debug.Log(www.error);
+        }
+        else
+        {
+            // Show results as text
+            Debug.Log("Upload complete!");
+
+            var xml = www.downloadHandler.text;
+
+            Debug.Log(xml);
+
+            rushManager.SetResponse(XmlCommunication.Deserialize<Response>(xml));
+
+            Debug.Log("Response received!");
+        }
+    }
+
+    IEnumerator Get(string uri)
+    {
+        Debug.Log("Downloading...");
+        UnityWebRequest www = UnityWebRequest.Get(uri);
+        www.certificateHandler = new AcceptAllCertificates();
+        yield return www.SendWebRequest();
+
+        if (www.isNetworkError || www.isHttpError)
+        {
+            Debug.Log(www.error);
+        }
+        else
+        {
+            // Show results as text
+            var xml = www.downloadHandler.text;
+            rushManager.SetResponse(XmlCommunication.Deserialize<Response>(xml));
+            Debug.Log(xml);
+        }
+    }
+
+    IEnumerator WeatherGet(WeatherProvider weatherProvider, string uri)
+    {
+        Debug.Log("Downloading weather...");
+        UnityWebRequest www = UnityWebRequest.Get(uri);
+        www.certificateHandler = new AcceptAllCertificates();
+        yield return www.SendWebRequest();
+
+        if (www.isNetworkError || www.isHttpError)
+        {
+            Debug.Log(www.error);
+        }
+        else
+        {
+            // Show results as text
+            var weather = www.downloadHandler.text;
+            weatherProvider.LoadFromResponse(weather);
+            Debug.Log(weather);
+        }
+    }
+
+    public class AcceptAllCertificates : CertificateHandler
+    {
+        protected override bool ValidateCertificate(byte[] certificateData)
+        {
+            return true;
+        }
+    }
+}
diff --git a/Client/Client/Assets/Scripts/UI/NetworkingManager.cs.meta b/Client/Client/Assets/Scripts/UI/NetworkingManager.cs.meta
new file mode 100644
index 0000000..572a696
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/NetworkingManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 293c714f76f64e2409990ec2bc9368c6
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/UI/RushManager.cs b/Client/Client/Assets/Scripts/UI/RushManager.cs
new file mode 100644
index 0000000..568cc80
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/RushManager.cs
@@ -0,0 +1,211 @@
+﻿using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class RushManager : MonoBehaviour
+{
+    private DateTimeManager dateTimeManager;
+    private WeatherManager weatherManager;
+    public NetworkingManager networkingManager;
+    public MapRenderer mapRenderer;
+
+    private Request request;
+    private Response response;
+
+    private Prediction currentPrediction;
+    public int predictionIndex;
+
+    public bool playing = false;
+    private bool loading = false;
+
+    public Animator loadingAnimator;
+
+    public float timePerSegment = 1f;
+    public float timer;
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        dateTimeManager = GetComponent<DateTimeManager>();
+        weatherManager = GetComponent<WeatherManager>();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        // No request made yet, no response received
+        // If there is no request and no response, new request should be made
+        if (request == null && response == null)
+        {
+            request = new Request();
+            request.start = dateTimeManager.currentDate;
+            weatherManager.SetWeather(request);
+            networkingManager.StartPost(request);
+        }
+        
+        // No request, response received - playing animation
+        else if (request == null && response != null)
+        {
+            if (loading)
+            {
+                loading = false;
+                if (loadingAnimator != null) 
+                    loadingAnimator.SetBool("loading", loading);
+            }
+
+            if (playing)
+            {
+                timer -= Time.deltaTime;
+                if (timer < 0)
+                {
+                    timer = timePerSegment;
+
+                    if (predictionIndex + 1 < response.predicitons.Length)
+                    {
+                        Next();
+                        playing = true; //  Correct for Next() setting playing = false
+                    }
+                    else
+                    {
+                        playing = false;
+                    }
+                }
+            }
+        }
+
+        // Request made, waiting for response
+        else if (request != null && response == null)
+        {
+            // Play loading animation
+            if (!loading)
+            {
+                loading = true;
+                if (loadingAnimator != null) 
+                    loadingAnimator.SetBool("loading", loading);
+                mapRenderer.SetColors(new double[Buildings.buildings.Length]);
+            }
+            //Debug.Log("Loading...");
+        }
+
+        else if (request != null && response != null)
+        {
+            Debug.LogError("Coexisting request and response. This should never happen.");
+        }
+
+    }
+
+    public void SetResponse(Response response)
+    {
+        this.request = null;
+        this.response = response;
+        currentPrediction = response.predicitons[0];
+        predictionIndex = 0;
+        Redraw();
+    }
+
+    public void CreateRequest(Date startDate, Date endDate, bool useOwnWeather)
+    {
+        this.response = null;
+        
+        request = new Request();
+        request.start = startDate;
+        request.useEndDate = endDate != null;
+        request.end = endDate;
+
+        weatherManager.SetWeather(request, useOwnWeather);
+        networkingManager.StartPost(request);
+    }
+
+    public void Play(bool play)
+    {
+        // Works as a play/pause toggle
+        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
+        playing = play;
+        timer = timePerSegment;
+
+        if (predictionIndex + 1 == response.predicitons.Length)
+        {
+            predictionIndex = 0;
+            currentPrediction = response.predicitons[0];
+            Redraw();
+        }
+    }
+
+    public void First()
+    {
+        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
+
+        playing = false;
+        currentPrediction = response.predicitons[0];
+        predictionIndex = 0;
+        Redraw();
+    }
+
+    public void Last()
+    {
+        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
+
+        playing = false;
+        currentPrediction = response.predicitons[response.predicitons.Length - 1];
+        predictionIndex = response.predicitons.Length - 1;
+        Redraw();
+    }
+
+    public void Previous()
+    {
+        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
+        
+        playing = false;
+
+        int newIndex = predictionIndex - 1;
+
+        if (newIndex == -1)
+            return;
+        predictionIndex = newIndex;
+        currentPrediction = response.predicitons[predictionIndex];
+        Redraw();
+    }
+
+    public void Next()
+    {
+        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return; }
+        
+        playing = false;
+
+        int newIndex = predictionIndex + 1;
+        if (newIndex == response.predicitons.Length)
+            return;
+        predictionIndex = newIndex;
+        currentPrediction = response.predicitons[predictionIndex];
+        Redraw();
+    }
+
+    public void ResetRush()
+    {
+        playing = false;
+        response = null;
+        currentPrediction = null;
+        predictionIndex = -1;
+        // If there is no request and no response, new request should be made in Update
+    }
+
+    public float GetProgress()
+    {
+        if (response == null) { Debug.LogError("Trying to access null response/prediction."); return 0f; }
+
+        if ((response.predicitons.Length - 1) == 0) return 1.0f;
+        return predictionIndex / (float)(response.predicitons.Length - 1);
+    }
+
+    private void Redraw()
+    {
+        var firstPred = response.predicitons[0];
+        var lastPred = response.predicitons[response.predicitons.Length-1];
+
+        dateTimeManager.SetDates(currentPrediction.dateTime, firstPred.dateTime, lastPred.dateTime);
+        weatherManager.SetDateTime(currentPrediction.dateTime);
+        mapRenderer.SetColors(currentPrediction.predictions);
+    }
+
+}
diff --git a/Client/Client/Assets/Scripts/UI/RushManager.cs.meta b/Client/Client/Assets/Scripts/UI/RushManager.cs.meta
new file mode 100644
index 0000000..18e0dbe
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/RushManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7aaba704d6fddc649b36d23259367344
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/UI/SceneManager.cs b/Client/Client/Assets/Scripts/UI/SceneManager.cs
new file mode 100644
index 0000000..fa698d2
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/SceneManager.cs
@@ -0,0 +1,42 @@
+﻿using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class SceneManager : MonoBehaviour
+{
+    [SerializeField]
+    public string mapSourceDirectory;
+
+    public GameObject weatherPanel;
+    public GameObject datePanel;
+    public GameObject buildingPanel;
+    public GameObject animationPanel;
+    public GameObject aboutPanel;
+
+    public bool first;
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        first = true;
+        weatherPanel.SetActive(true);
+        datePanel.SetActive(true);
+        buildingPanel.SetActive(true);
+        animationPanel.SetActive(true);
+        aboutPanel.SetActive(true);
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        if (first)
+        {
+            weatherPanel.SetActive(false);
+            datePanel.SetActive(false);
+            buildingPanel.SetActive(false);
+            animationPanel.SetActive(false);
+            aboutPanel.SetActive(false);
+            first = false;
+        }
+    }
+}
diff --git a/Client/Client/Assets/Scripts/UI/SceneManager.cs.meta b/Client/Client/Assets/Scripts/UI/SceneManager.cs.meta
new file mode 100644
index 0000000..2614067
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/SceneManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 833f84acfa541974ebffb9dab10cb27c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/UI/WebGLMapController.cs b/Client/Client/Assets/Scripts/UI/WebGLMapController.cs
new file mode 100644
index 0000000..9cbd9ee
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/WebGLMapController.cs
@@ -0,0 +1,195 @@
+﻿// Tutorial: http://coffeebreakcodes.com/drag-object-with-mouse-unity3d/
+
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.EventSystems;
+
+public class WebGLMapController : MonoBehaviour
+{
+	[SerializeField]
+	private MapRenderer map;
+
+	[SerializeField]
+	private float zoomSpeed;
+
+	[SerializeField]
+	private float minScale = 0.5f;
+	
+	[SerializeField]
+	private float maxScale = 1f;
+
+	private Vector3 originalPos;
+	private Vector3 screenPoint;
+	private Vector3 offset;
+
+    public bool block;
+	public bool blockExternal;
+
+	void Start()
+	{
+		originalPos = map.transform.position;
+	}
+
+	void Update()
+	{
+		ClampPan();
+	}
+
+    void OnMouseDown()
+	{
+		if (!map.interactable || block || blockExternal) return;
+		if (EventSystem.current.IsPointerOverGameObject())
+        {
+			block = true;
+            return;
+        }
+
+		screenPoint = Camera.main.WorldToScreenPoint(map.transform.position);
+		offset = map.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
+	}
+
+	void OnMouseDrag()
+	{
+		if (!map.interactable || block || blockExternal) return;
+
+		Vector3 cursorPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
+		Vector3 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset;
+		map.transform.position = cursorPosition;
+		ClampPan();
+	}
+
+    private void OnMouseOver()
+	{
+		if (!map.interactable || block || blockExternal) return;
+		if (EventSystem.current.IsPointerOverGameObject())
+			return;
+
+		var scroll = Input.mouseScrollDelta.y;		
+		float step = Time.deltaTime * zoomSpeed;
+		float scale = map.transform.localScale.x;
+
+		var xnorm = map.transform.position.x / scale;
+		var ynorm = map.transform.position.y / scale;
+
+		if (scroll > 0)
+			scale = ClampScale(scale + step);
+		else if (scroll < 0)
+			scale = ClampScale(scale - step);
+		
+		Vector3 localScale = new Vector3(scale, scale, 1);
+		map.transform.localScale = localScale;
+		map.transform.position = new Vector3(xnorm * scale, ynorm * scale, map.transform.position.z);
+
+		ClampPan();
+	}
+
+    public void OnMouseUp()
+    {
+		block = false;
+    }
+
+    private void ClampPan()
+	{
+		var bounds = map.transform.Find("Underlay").GetComponent<SpriteRenderer>().sprite.bounds;
+		bounds = TransformBounds(bounds, map.transform.localScale);
+
+		var screenMin = Camera.main.WorldToScreenPoint(bounds.min + map.transform.position);
+		var screenMax = Camera.main.WorldToScreenPoint(bounds.max + map.transform.position);
+
+		float shiftX = 0f;
+		float shiftY = 0f;
+
+		var mapWidth = screenMax.x - screenMin.x;
+		var mapHeight = screenMax.y - screenMin.y;
+
+		bool wider = mapWidth >= Camera.main.pixelWidth;
+		bool taller = mapHeight >= Camera.main.pixelHeight;
+
+		if (wider)
+        {
+			if (screenMin.x > 0)
+				shiftX -= screenMin.x;
+
+			if (screenMax.x < Camera.main.pixelWidth)
+				shiftX += Camera.main.pixelWidth - screenMax.x;
+		}
+
+		if (taller)
+		{
+			if (screenMin.y > 0)
+				shiftY -= screenMin.y;
+
+			if (screenMax.y < Camera.main.pixelHeight)
+				shiftY += Camera.main.pixelHeight - screenMax.y;
+		}
+
+		var screenCenter = Camera.main.WorldToScreenPoint(map.transform.position);
+		screenCenter.x += shiftX;
+		screenCenter.y += shiftY;
+		map.transform.position = Camera.main.ScreenToWorldPoint(screenCenter);
+
+		if (wider && taller)
+        {
+			// Nothing to do, the position is correct
+		}
+		else if (taller)
+        {
+			// Set original x coord
+			map.transform.position = new Vector3(
+				originalPos.x,
+				map.transform.position.y,
+				map.transform.position.z);
+		}
+		else if (wider)
+        {
+			// Set original y coord
+			map.transform.position = new Vector3(
+				map.transform.position.x,
+				originalPos.y,
+				map.transform.position.z);
+		}
+		else
+        {
+			// Set original position but this should not happen
+			map.transform.position = originalPos;
+		}
+		
+	}
+
+	private float ClampScale(float scale)
+    {
+		return Mathf.Min(Mathf.Max(scale, minScale), maxScale);
+	}
+
+	private Bounds TransformBounds(Bounds bounds, Vector3 scale)
+	{
+		var size = bounds.size;
+
+		size.x *= scale.x;
+		size.y *= scale.y;
+		size.z *= scale.z;
+
+		return new Bounds(bounds.center, size);
+	}
+
+	public void ZoomOn(SpriteRenderer sprite)
+	{
+		if (sprite == null)
+        {
+			Debug.LogError("Zooming on null spriteRenderer. Skipping operation.");
+			return;
+        }
+
+		Vector3 localScale = new Vector3(maxScale, maxScale, 1);
+		map.transform.localScale = localScale;
+
+		var from = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10f));
+		var to = sprite.transform.position;
+
+		map.transform.position = map.transform.position - (to - from);
+	
+		ClampPan();
+	}
+
+}
diff --git a/Client/Client/Assets/Scripts/UI/WebGLMapController.cs.meta b/Client/Client/Assets/Scripts/UI/WebGLMapController.cs.meta
new file mode 100644
index 0000000..fd58de5
--- /dev/null
+++ b/Client/Client/Assets/Scripts/UI/WebGLMapController.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 379fb18718ee0f2469e5c60a36b96218
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Client/Client/Assets/Scripts/Weather/WeatherData.cs b/Client/Client/Assets/Scripts/Weather/WeatherData.cs
index 6590199..5ad3490 100644
--- a/Client/Client/Assets/Scripts/Weather/WeatherData.cs
+++ b/Client/Client/Assets/Scripts/Weather/WeatherData.cs
@@ -3,15 +3,46 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
+/// <summary>
+/// Weather data container
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public class WeatherData
 {
+    /// <summary>
+    /// Observers to changes in the data
+    /// </summary>
     private List<WeatherObserver> observers = new List<WeatherObserver>();
 
+    /// <summary>
+    /// Temperature
+    /// </summary>
     public double Temperature { get; private set; }
+    
+    /// <summary>
+    /// Wind speed
+    /// </summary>
     public double Wind { get; private set; }
+    
+    /// <summary>
+    /// Rain probability
+    /// </summary>
     public double Rain { get; private set; }
+    
+    /// <summary>
+    /// Weather condition
+    /// </summary>
     public WeatherConditions Weather { get; private set; }
 
+    /// <summary>
+    /// Value setter
+    /// </summary>
+    /// <param name="temperature">Temperature to set</param>
+    /// <param name="wind">Wind speed to set</param>
+    /// <param name="rain">Rain probability to set</param>
+    /// <param name="weather">Weather condition to set</param>
     public void SetValues(double temperature, double wind, double rain, WeatherConditions weather)
     {
         Temperature = temperature;
@@ -25,6 +56,10 @@ public class WeatherData
             observer.Notify(this);
     }
 
+    /// <summary>
+    /// Registers an observer
+    /// </summary>
+    /// <param name="observer">A WeatherObserver to register</param>
     public void RegisterObserver(WeatherObserver observer)
     {
         observers.Add(observer);
diff --git a/Client/Client/Assets/Scripts/Weather/WeatherManager.cs b/Client/Client/Assets/Scripts/Weather/WeatherManager.cs
index df0fba7..efe2a69 100644
--- a/Client/Client/Assets/Scripts/Weather/WeatherManager.cs
+++ b/Client/Client/Assets/Scripts/Weather/WeatherManager.cs
@@ -5,19 +5,58 @@ using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
+/// <summary>
+/// Manages weather status of the application
+///
+/// Author: kacerekz
+/// 
+/// </summary>
 public class WeatherManager : MonoBehaviour, WeatherObserver
 {
+
+    /// <summary>
+    /// Networking manager
+    /// </summary>
     public NetworkingManager networkingManager;
+    
+    /// <summary>
+    /// Weather provider
+    /// </summary>
     public WeatherProvider provider;
+    
+    /// <summary>
+    /// Weather data
+    /// </summary>
     public WeatherData data;
 
+
+    /// <summary>
+    /// Weather condition text
+    /// </summary>
     public Text weatherText;
+    
+    /// <summary>
+    /// Temperature text
+    /// </summary>
     public Text temperatureText;
+    
+    /// <summary>
+    /// Rain probability text
+    /// </summary>
     public Text rainText;
+
+    /// <summary>
+    /// Wind speed text
+    /// </summary>
     public Text windText;
 
+
+    /// <summary>
+    /// True if using weather set by the user
+    /// </summary>
     public bool useOwnWeather;
 
+    // Start is called at application start
     void Start()
     {
         data = new WeatherData();
@@ -27,6 +66,10 @@ public class WeatherManager : MonoBehaviour, WeatherObserver
         provider.Load();
     }
 
+    /// <summary>
+    /// Process change in weather data
+    /// </summary>
+    /// <param name="data">Weather data</param>
     public void Notify(WeatherData data)
     {
         switch (data.Weather)
@@ -50,11 +93,20 @@ public class WeatherManager : MonoBehaviour, WeatherObserver
         windText.text = $"WIND {(int)Mathf.Round((float)data.Wind)} M/S";
     }
 
+    /// <summary>
+    /// Fill a request with weather data
+    /// </summary>
+    /// <param name="request">Request to fill</param>
     public void SetWeather(Request request)
     {
         SetWeather(request, useOwnWeather);
     }
 
+    /// <summary>
+    /// Fill a request with weather data
+    /// </summary>
+    /// <param name="request">Request to fill</param>
+    /// <param name="useOwnWeather">True to use weather set by the user</param>
     public void SetWeather(Request request, bool useOwnWeather)
     {
         this.useOwnWeather = useOwnWeather;
@@ -68,6 +120,10 @@ public class WeatherManager : MonoBehaviour, WeatherObserver
         }
     }
 
+    /// <summary>
+    /// Sets weather based on a given date and time
+    /// </summary>
+    /// <param name="dateTime">Date and time</param>
     public void SetDateTime(Date dateTime)
     {
         if (!useOwnWeather)
@@ -81,6 +137,9 @@ public class WeatherManager : MonoBehaviour, WeatherObserver
         }
     }
 
+    /// <summary>
+    /// Resets weather to prediction for current date and time
+    /// </summary>
     public void Clear()
     {
         provider.Load();
diff --git a/Client/Client/Assets/Scripts/Weather/WeatherObserver.cs b/Client/Client/Assets/Scripts/Weather/WeatherObserver.cs
index c354320..89b24aa 100644
--- a/Client/Client/Assets/Scripts/Weather/WeatherObserver.cs
+++ b/Client/Client/Assets/Scripts/Weather/WeatherObserver.cs
@@ -2,7 +2,17 @@
 using System.Collections.Generic;
 using UnityEngine;
 
+/// <summary>
+/// WeatherObserver interface
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public interface WeatherObserver
 {
+    /// <summary>
+    /// A WeatherObserver must be able to process changes to weather data
+    /// </summary>
+    /// <param name="data">Weather data</param>
     void Notify(WeatherData data);
 }
diff --git a/Client/Client/Assets/Scripts/Weather/WeatherProvider.cs b/Client/Client/Assets/Scripts/Weather/WeatherProvider.cs
index 8b0bc1c..ee542ea 100644
--- a/Client/Client/Assets/Scripts/Weather/WeatherProvider.cs
+++ b/Client/Client/Assets/Scripts/Weather/WeatherProvider.cs
@@ -5,16 +5,44 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
+/// <summary>
+/// Takes care of using the weather parser to acquire predictions
+/// 
+/// Author: kacerekz
+/// 
+/// </summary>
 public class WeatherProvider
 {
+    /// <summary>
+    /// Networking manager
+    /// </summary>
     public NetworkingManager networkingManager;
+    
+    /// <summary>
+    /// Weather uri
+    /// </summary>
     public string uri = "https://wttr.in/Plzen,czechia?format=j1";
 
+    /// <summary>
+    /// Parser to use
+    /// </summary>
     private JsonParser parser;
+
+    /// <summary>
+    /// Weather data to fill
+    /// </summary>
     private WeatherData data;
 
+    /// <summary>
+    /// Date and time of most recent weather download
+    /// </summary>
     private static DateTime lastDownload = DateTime.Now.AddHours(-2);
 
+    /// <summary>
+    /// Constructor
+    /// </summary>
+    /// <param name="data">Weather data to fill</param>
+    /// <param name="networkingManager">Networking manager</param>
     public WeatherProvider(WeatherData data, NetworkingManager networkingManager)
     {
         this.data = data;
@@ -22,17 +50,20 @@ public class WeatherProvider
         parser = new JsonParser();
     }
 
+    /// <summary>
+    /// Download a prediction from the weather server
+    /// </summary>
     public void Load()
     {
         DateTime next = lastDownload.AddHours(1);
 
-        Debug.Log($"Last: {lastDownload.ToShortDateString()} {lastDownload.ToShortTimeString()}");
-        Debug.Log($"Now: {DateTime.Now.ToShortDateString()} {DateTime.Now.ToShortTimeString()}");
-        Debug.Log($"Next: {next.ToShortDateString()} {next.ToShortTimeString()}");
+        //Debug.Log($"Last: {lastDownload.ToShortDateString()} {lastDownload.ToShortTimeString()}");
+        //Debug.Log($"Now: {DateTime.Now.ToShortDateString()} {DateTime.Now.ToShortTimeString()}");
+        //Debug.Log($"Next: {next.ToShortDateString()} {next.ToShortTimeString()}");
 
         if (next < DateTime.Now)
         {
-            Debug.Log("Passing to load");
+            //Debug.Log("Passing to load");
             lastDownload = DateTime.Now;
             networkingManager.StartWeatherGet(this, uri);
         }
@@ -53,6 +84,10 @@ public class WeatherProvider
         }
     }
 
+    /// <summary>
+    /// Loads data from a weather server response
+    /// </summary>
+    /// <param name="response">Weather server response</param>
     public void LoadFromResponse(string response)
     {
         parser.ParsePrediction(response);
@@ -69,26 +104,13 @@ public class WeatherProvider
         date.hour = hour;
 
         Load(date);
-
-        //var current = parser.Current;
-
-        //if (current != null)
-        //{
-        //    var temperature = current.temp;
-        //    var rain = current.rain;
-        //    var wind = current.wind;
-        //    var weather = current.condition;
-
-        //    Debug.Log($"Wanna set: tmp={temperature}, wind={wind}, rain={rain}, weather={weather}");
-
-        //    data.SetValues(temperature, wind, rain, weather);
-        //}
-        //else
-        //{
-        //    Debug.LogError("Error loading weather.");
-        //}
     }
 
+    /// <summary>
+    /// Loads forecast for a given date and time
+    /// </summary>
+    /// <param name="dateTime">Date and time to get prediction for</param>
+    /// <returns>True if prediction for the given date and time was found</returns>
     public bool Load(Date dateTime)
     {
         var predictions = parser.Predictions;
diff --git a/Client/Client/Assets/Scripts/WebGLMapController.cs b/Client/Client/Assets/Scripts/WebGLMapController.cs
deleted file mode 100644
index 9cbd9ee..0000000
--- a/Client/Client/Assets/Scripts/WebGLMapController.cs
+++ /dev/null
@@ -1,195 +0,0 @@
-﻿// Tutorial: http://coffeebreakcodes.com/drag-object-with-mouse-unity3d/
-
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.EventSystems;
-
-public class WebGLMapController : MonoBehaviour
-{
-	[SerializeField]
-	private MapRenderer map;
-
-	[SerializeField]
-	private float zoomSpeed;
-
-	[SerializeField]
-	private float minScale = 0.5f;
-	
-	[SerializeField]
-	private float maxScale = 1f;
-
-	private Vector3 originalPos;
-	private Vector3 screenPoint;
-	private Vector3 offset;
-
-    public bool block;
-	public bool blockExternal;
-
-	void Start()
-	{
-		originalPos = map.transform.position;
-	}
-
-	void Update()
-	{
-		ClampPan();
-	}
-
-    void OnMouseDown()
-	{
-		if (!map.interactable || block || blockExternal) return;
-		if (EventSystem.current.IsPointerOverGameObject())
-        {
-			block = true;
-            return;
-        }
-
-		screenPoint = Camera.main.WorldToScreenPoint(map.transform.position);
-		offset = map.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
-	}
-
-	void OnMouseDrag()
-	{
-		if (!map.interactable || block || blockExternal) return;
-
-		Vector3 cursorPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
-		Vector3 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset;
-		map.transform.position = cursorPosition;
-		ClampPan();
-	}
-
-    private void OnMouseOver()
-	{
-		if (!map.interactable || block || blockExternal) return;
-		if (EventSystem.current.IsPointerOverGameObject())
-			return;
-
-		var scroll = Input.mouseScrollDelta.y;		
-		float step = Time.deltaTime * zoomSpeed;
-		float scale = map.transform.localScale.x;
-
-		var xnorm = map.transform.position.x / scale;
-		var ynorm = map.transform.position.y / scale;
-
-		if (scroll > 0)
-			scale = ClampScale(scale + step);
-		else if (scroll < 0)
-			scale = ClampScale(scale - step);
-		
-		Vector3 localScale = new Vector3(scale, scale, 1);
-		map.transform.localScale = localScale;
-		map.transform.position = new Vector3(xnorm * scale, ynorm * scale, map.transform.position.z);
-
-		ClampPan();
-	}
-
-    public void OnMouseUp()
-    {
-		block = false;
-    }
-
-    private void ClampPan()
-	{
-		var bounds = map.transform.Find("Underlay").GetComponent<SpriteRenderer>().sprite.bounds;
-		bounds = TransformBounds(bounds, map.transform.localScale);
-
-		var screenMin = Camera.main.WorldToScreenPoint(bounds.min + map.transform.position);
-		var screenMax = Camera.main.WorldToScreenPoint(bounds.max + map.transform.position);
-
-		float shiftX = 0f;
-		float shiftY = 0f;
-
-		var mapWidth = screenMax.x - screenMin.x;
-		var mapHeight = screenMax.y - screenMin.y;
-
-		bool wider = mapWidth >= Camera.main.pixelWidth;
-		bool taller = mapHeight >= Camera.main.pixelHeight;
-
-		if (wider)
-        {
-			if (screenMin.x > 0)
-				shiftX -= screenMin.x;
-
-			if (screenMax.x < Camera.main.pixelWidth)
-				shiftX += Camera.main.pixelWidth - screenMax.x;
-		}
-
-		if (taller)
-		{
-			if (screenMin.y > 0)
-				shiftY -= screenMin.y;
-
-			if (screenMax.y < Camera.main.pixelHeight)
-				shiftY += Camera.main.pixelHeight - screenMax.y;
-		}
-
-		var screenCenter = Camera.main.WorldToScreenPoint(map.transform.position);
-		screenCenter.x += shiftX;
-		screenCenter.y += shiftY;
-		map.transform.position = Camera.main.ScreenToWorldPoint(screenCenter);
-
-		if (wider && taller)
-        {
-			// Nothing to do, the position is correct
-		}
-		else if (taller)
-        {
-			// Set original x coord
-			map.transform.position = new Vector3(
-				originalPos.x,
-				map.transform.position.y,
-				map.transform.position.z);
-		}
-		else if (wider)
-        {
-			// Set original y coord
-			map.transform.position = new Vector3(
-				map.transform.position.x,
-				originalPos.y,
-				map.transform.position.z);
-		}
-		else
-        {
-			// Set original position but this should not happen
-			map.transform.position = originalPos;
-		}
-		
-	}
-
-	private float ClampScale(float scale)
-    {
-		return Mathf.Min(Mathf.Max(scale, minScale), maxScale);
-	}
-
-	private Bounds TransformBounds(Bounds bounds, Vector3 scale)
-	{
-		var size = bounds.size;
-
-		size.x *= scale.x;
-		size.y *= scale.y;
-		size.z *= scale.z;
-
-		return new Bounds(bounds.center, size);
-	}
-
-	public void ZoomOn(SpriteRenderer sprite)
-	{
-		if (sprite == null)
-        {
-			Debug.LogError("Zooming on null spriteRenderer. Skipping operation.");
-			return;
-        }
-
-		Vector3 localScale = new Vector3(maxScale, maxScale, 1);
-		map.transform.localScale = localScale;
-
-		var from = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10f));
-		var to = sprite.transform.position;
-
-		map.transform.position = map.transform.position - (to - from);
-	
-		ClampPan();
-	}
-
-}
diff --git a/Client/Client/Assets/Scripts/WebGLMapController.cs.meta b/Client/Client/Assets/Scripts/WebGLMapController.cs.meta
deleted file mode 100644
index fd58de5..0000000
--- a/Client/Client/Assets/Scripts/WebGLMapController.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 379fb18718ee0f2469e5c60a36b96218
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
