diff --git a/.github/AUTHORS.md b/.github/AUTHORS.md
index 186ac293..7092e14a 100755
--- a/.github/AUTHORS.md
+++ b/.github/AUTHORS.md
@@ -20,6 +20,7 @@ Code:
 	Luis Cordova <cordoval@gmail.com>
 	Łukasz Jernaś <deejay1@srem.org>
 	Markus Stoll <post@mstoll.de>
+    Malte Kiefer <malte.kiefer@mailgermania.de>
 	Michael Monreal <michael.monreal@gmail.com>
 	Nick Richards <nick@nickr.org>
 	Oleg Khlystov <pktfag@gmail.com>
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..4b69bfbe
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: hbons
diff --git a/.gitignore b/.gitignore
index 3c5d08c2..a864264b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,8 +18,8 @@ obj/
 git-*
 Sparkles/InstallationInfo.Directory.cs
 SparkleShare/Linux/sparkleshare
-SparkleShare/Mac/git/*
 SparkleShare/Mac/git*
+SparkleShare/Mac/*.tar.gz
 /sparkleshare-*
 desktop.ini
 _ReSharper.*
diff --git a/README.md b/README.md
index 8c0a95fe..23d84f66 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,10 @@
 # [SparkleShare](https://www.sparkleshare.org/)
 
-[SparkleShare](https://www.sparkleshare.org/) is a file sharing and collaboration app. It works just like Dropbox, and you can run it on your own server. It's available for Linux distributions, macOS, and Windows. [Support the project on Patreon](https://www.patreon.com/SparkleShare).
+[SparkleShare](https://www.sparkleshare.org/) is a file sharing and collaboration app. It works just like Dropbox, and you can run it on your own server. It's available for Linux distributions, macOS, and Windows.
 
 ![Banner](https://raw.githubusercontent.com/hbons/SparkleShare/master/SparkleShare/Common/Images/readme-banner.png)
 
+You can support this project through [💕 GitHub Sponsors](https://github.com/sponsors/hbons).
 
 ## How does it work?
 
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 74e7fcf0..d5eaed1d 100755
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -1,3 +1,12 @@
+3.38.0 (Sun 29 Nov, 2020):
+
+    - Added support for LibRAavatar
+    - Updated Gravatar cert fingerprint
+    - Removed planio from supported presets
+    - Support default branches that are not named 'master'
+    - Added support for nightly Flatpak builds
+
+
 3.28.0 (Sat 14 Jul, 2018):
 
     Fixed a bunch of crashes and lots of under-the-hood improvements.
diff --git a/SparkleShare/Common/AboutController.cs b/SparkleShare/Common/AboutController.cs
index 514d045a..5095cb45 100644
--- a/SparkleShare/Common/AboutController.cs
+++ b/SparkleShare/Common/AboutController.cs
@@ -61,6 +61,8 @@ namespace SparkleShare {
             UpdateLabelEvent ("Checking for updates…");
             Thread.Sleep (500);
 
+            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
+
             var web_client = new WebClient ();
             var uri = new Uri ("https://www.sparkleshare.org/version");
 
diff --git a/SparkleShare/Common/Avatars.cs b/SparkleShare/Common/Avatars.cs
index bf0738cc..e9a5631a 100644
--- a/SparkleShare/Common/Avatars.cs
+++ b/SparkleShare/Common/Avatars.cs
@@ -32,10 +32,11 @@ namespace SparkleShare
         static List<string> skipped_avatars = new List<string> ();
 
 
-        public static string GetAvatar (string email, int size, string target_path)
+        public static string GetAvatar (string email, int size, string target_path, string provider)
         {
             #if __MonoCS__
-            ServicePointManager.ServerCertificateValidationCallback = GetAvatarValidationCallBack;
+                if (provider == "gravatar")
+                    ServicePointManager.ServerCertificateValidationCallback = GetGravatarValidationCallBack;
             #endif
 
             email = email.ToLower ();
@@ -68,7 +69,12 @@ namespace SparkleShare
             }
 
             var client = new WebClient ();
-            string url =  "https://gravatar.com/avatar/" + email.MD5 () + ".png?s=" + size + "&d=404";
+            string url = "";
+
+            if (provider == "libravatar")
+                url =  "https://seccdn.libravatar.org/avatar/" + email.MD5 () + ".png?s=" + size + "&d=404";
+            else
+                url =  "https://secure.gravatar.com/avatar/" + email.MD5 () + ".png?s=" + size + "&d=404";
 
             try {
                 byte [] buffer = client.DownloadData (url);
@@ -107,7 +113,7 @@ namespace SparkleShare
         }
 
 
-        private static bool GetAvatarValidationCallBack (Object sender,
+        private static bool GetGravatarValidationCallBack (Object sender,
             X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
         {
             X509Certificate2 certificate2 = new X509Certificate2 (certificate.GetRawCertData ());
@@ -115,9 +121,10 @@ namespace SparkleShare
             // On some systems (mostly Linux) we can't assume the needed certificates are
             // available, so we have to check the certificate's SHA-1 fingerprint manually.
             //
-            // SHA1 fingerprinter obtained from https://www.gravatar.com/ on Oct 16 2015
-            // Set to expire on Oct 14 2018
-            string gravatar_cert_fingerprint = "1264B3F00814C6077D3853238771EE67FB6321C9";
+            // SHA1 fingerprinter obtained from https://www.gravatar.com/ on Oct 23 2020
+            // Set to expire on Nov 16 2022
+            
+            string gravatar_cert_fingerprint = "846963703FD297724E91BDF47FFE4BC19E93EA15";
 
             if (!certificate2.Thumbprint.Equals (gravatar_cert_fingerprint)) {
                 Logger.LogInfo ("Avatars", "Invalid certificate for https://www.gravatar.com/");
diff --git a/SparkleShare/Common/BaseController.cs b/SparkleShare/Common/BaseController.cs
index 3a405c1a..13814223 100644
--- a/SparkleShare/Common/BaseController.cs
+++ b/SparkleShare/Common/BaseController.cs
@@ -153,6 +153,16 @@ namespace SparkleShare {
             }
         }
 
+        public string AvatarsProvider {
+            get {
+                string avatars_provider_string = Config.GetConfigOption ("avatars_provider");
+
+                if (avatars_provider_string == null)
+                    return "gravatar";
+
+                return avatars_provider_string;
+            }
+        }
 
         // Path where the plugins are kept
         public abstract string PresetsPath { get; }
@@ -451,8 +461,16 @@ namespace SparkleShare {
             };
 
             repo.NewChangeSet += delegate (ChangeSet change_set) {
-                if (AvatarsEnabled)
-                    change_set.User.AvatarFilePath = Avatars.GetAvatar (change_set.User.Email, 48, Config.DirectoryPath);
+                if (AvatarsEnabled) {
+                    string provider = "gravatar";
+
+                    if (AvatarsProvider == "libravatar")
+                        provider = AvatarsProvider;
+
+
+                    change_set.User.AvatarFilePath = Avatars.GetAvatar (change_set.User.Email, 48, Config.DirectoryPath, provider);
+
+                }
 
                 NotificationRaised (change_set);
             };
diff --git a/SparkleShare/Common/BubblesController.cs b/SparkleShare/Common/BubblesController.cs
index 8fba4a46..c2d9198b 100644
--- a/SparkleShare/Common/BubblesController.cs
+++ b/SparkleShare/Common/BubblesController.cs
@@ -21,13 +21,20 @@ using Sparkles;
 namespace SparkleShare {
 
     public class BubblesController {
+        private bool fix_utf_encoding;
 
         public event ShowBubbleEventHandler ShowBubbleEvent = delegate { };
         public delegate void ShowBubbleEventHandler (string title, string subtext, string image_path);
 
 
-        public BubblesController ()
+        public BubblesController () : this(true)
         {
+        }
+
+        public BubblesController (bool fix_utf_encoding)
+        {
+            this.fix_utf_encoding = fix_utf_encoding;
+
             SparkleShare.Controller.AlertNotificationRaised += delegate (string title, string message) {
                 ShowBubble (title, message, null);
             };
@@ -40,10 +47,13 @@ namespace SparkleShare {
 
         public void ShowBubble (string title, string subtext, string image_path)
         {
-            byte [] title_bytes   = Encoding.Default.GetBytes (title);
-            byte [] subtext_bytes = Encoding.Default.GetBytes (subtext);
-            title                 = Encoding.UTF8.GetString (title_bytes);
-            subtext               = Encoding.UTF8.GetString (subtext_bytes);
+            if(fix_utf_encoding)
+            {
+                byte [] title_bytes = Encoding.Default.GetBytes (title);
+                byte [] subtext_bytes = Encoding.Default.GetBytes (subtext);
+                title = Encoding.UTF8.GetString (title_bytes);
+                subtext = Encoding.UTF8.GetString (subtext_bytes);
+            }
 
             ShowBubbleEvent (title, subtext, image_path);
         }
diff --git a/SparkleShare/Common/EventLogController.cs b/SparkleShare/Common/EventLogController.cs
index 706997bf..b5c6b37b 100644
--- a/SparkleShare/Common/EventLogController.cs
+++ b/SparkleShare/Common/EventLogController.cs
@@ -53,7 +53,7 @@ namespace SparkleShare {
         private string selected_folder;
         private RevisionInfo restore_revision_info;
         private bool history_view_active;
-
+        private bool fix_utf_encoding;
 
         public bool WindowIsOpen { get; private set; }
 
@@ -144,8 +144,14 @@ namespace SparkleShare {
         }
 
 
-        public EventLogController ()
+        public EventLogController () : this (true)
+        {
+        }
+
+        public EventLogController (bool fix_utf_encoding)
         {
+            this.fix_utf_encoding = fix_utf_encoding;
+
             SparkleShare.Controller.ShowEventLogWindowEvent += delegate {
                 if (!WindowIsOpen) {
                     ContentLoadingEvent ();
@@ -257,8 +263,11 @@ namespace SparkleShare {
                 string folder    = href.Replace ("history://", "").Split ("/".ToCharArray ()) [0];
                 string file_path = href.Replace ("history://" + folder + "/", "");
 
-                byte [] file_path_bytes = Encoding.Default.GetBytes (file_path);
-                file_path               = Encoding.UTF8.GetString (file_path_bytes);
+                if(fix_utf_encoding)
+                {
+                    byte [] file_path_bytes = Encoding.Default.GetBytes (file_path);
+                    file_path = Encoding.UTF8.GetString (file_path_bytes);
+                }
 
                 file_path = Uri.UnescapeDataString (file_path);
 
@@ -536,10 +545,13 @@ namespace SparkleShare {
 
         private string FormatBreadCrumbs (string path_root, string path)
         {
-            byte [] path_root_bytes = Encoding.Default.GetBytes (path_root);
-            byte [] path_bytes      = Encoding.Default.GetBytes (path);
-            path_root               = Encoding.UTF8.GetString (path_root_bytes);
-            path                    = Encoding.UTF8.GetString (path_bytes);
+            if(fix_utf_encoding)
+            {
+                byte [] path_root_bytes = Encoding.Default.GetBytes (path_root);
+                byte [] path_bytes = Encoding.Default.GetBytes (path);
+                path_root = Encoding.UTF8.GetString (path_root_bytes);
+                path = Encoding.UTF8.GetString (path_bytes);
+            }
 
             path_root                = path_root.Replace ("/", Path.DirectorySeparatorChar.ToString ());
             path                     = path.Replace ("/", Path.DirectorySeparatorChar.ToString ());
@@ -598,7 +610,7 @@ namespace SparkleShare {
             if (!SparkleShare.Controller.AvatarsEnabled)
                 return "<!-- $pixmaps-path -->/user-icon-default.png";
 
-            string fetched_avatar = Avatars.GetAvatar (user.Email, 48, SparkleShare.Controller.Config.DirectoryPath);
+            string fetched_avatar = Avatars.GetAvatar (user.Email, 48, SparkleShare.Controller.Config.DirectoryPath, SparkleShare.Controller.AvatarsProvider);
 
             if (!string.IsNullOrEmpty (fetched_avatar))
                 return "file://" + fetched_avatar.Replace ("\\", "/");
diff --git a/SparkleShare/Common/Images/Sources/planio.svg b/SparkleShare/Common/Images/Sources/planio.svg
deleted file mode 100644
index 75aedb5c..00000000
--- a/SparkleShare/Common/Images/Sources/planio.svg
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   id="svg9662"
-   height="24"
-   width="24"
-   version="1.1"
-   inkscape:version="0.91+devel r14094"
-   sodipodi:docname="planio.svg"
-   viewBox="0 0 24 24"
-   inkscape:export-filename="/Users/hbons/Personal/Projects/SparkleShare/SparkleShare/Common/Presets/planio.png"
-   inkscape:export-xdpi="96"
-   inkscape:export-ydpi="96">
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1280"
-     inkscape:window-height="755"
-     id="namedview4365"
-     inkscape:document-units="px"
-     showgrid="false"
-     inkscape:zoom="16"
-     inkscape:cx="11.663307"
-     inkscape:cy="11.258003"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="g4326"
-     inkscape:snap-global="true"
-     inkscape:snap-smooth-nodes="false"
-     inkscape:object-nodes="false"
-     inkscape:snap-bbox="true"
-     inkscape:snap-nodes="false"
-     inkscape:bbox-paths="false"
-     inkscape:bbox-nodes="true">
-    <inkscape:grid
-       type="xygrid"
-       id="grid4341" />
-  </sodipodi:namedview>
-  <defs
-     id="defs3">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4455">
-      <stop
-         style="stop-color:#74caea;stop-opacity:1"
-         offset="0"
-         id="stop4457" />
-      <stop
-         style="stop-color:#34a1ca;stop-opacity:1"
-         offset="1"
-         id="stop4459" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4447">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4449" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop4451" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4428">
-      <stop
-         style="stop-color:#005474;stop-opacity:1"
-         offset="0"
-         id="stop4430" />
-      <stop
-         style="stop-color:#37a9d4;stop-opacity:1"
-         offset="1"
-         id="stop4432" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4304">
-      <stop
-         style="stop-color:#ce2509;stop-opacity:1"
-         offset="0"
-         id="stop4306" />
-      <stop
-         style="stop-color:#a9210a;stop-opacity:1"
-         offset="1"
-         id="stop4308" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4304"
-       id="linearGradient4310"
-       x1="28.415369"
-       y1="9.2727699"
-       x2="31.521933"
-       y2="19.203804"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4428"
-       id="linearGradient4434"
-       x1="39.367229"
-       y1="23.90914"
-       x2="34.828079"
-       y2="3.3593886"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.9885037,0,0,0.98994346,20.217703,1.7271878)" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4447"
-       id="radialGradient4453"
-       cx="52.259827"
-       cy="9.6745958"
-       fx="52.259827"
-       fy="9.6745958"
-       r="9.5658912"
-       gradientTransform="matrix(2.1628252,0,0,2.9778165,-60.887608,-20.066985)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4455"
-       id="linearGradient4526"
-       x1="53.775932"
-       y1="11.068961"
-       x2="56.46653"
-       y2="23.231386"
-       gradientUnits="userSpaceOnUse" />
-  </defs>
-  <metadata
-     id="metadata4">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="g4326"
-     transform="matrix(1.01163,0,0,1.0101587,-20.452835,-1.7447338)"
-     style="stroke-width:0.9892233">
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="0.46403605"
-       inkscape:original="M 54.814453 3.7070312 C 53.729581 3.7104612 52.652708 3.8923279 51.626953 4.2460938 L 52.835938 10.195312 L 48.294922 6.1738281 C 48.133924 6.3131014 47.977862 6.4580369 47.826172 6.6074219 C 46.443434 7.9940104 45.502551 9.7611672 45.123047 11.683594 L 50.873047 13.607422 L 45.123047 15.53125 C 45.502551 17.453676 46.443434 19.218881 47.826172 20.605469 C 47.977861 20.754855 48.133925 20.89979 48.294922 21.039062 L 52.833984 17.017578 L 51.626953 22.966797 C 52.652675 23.320563 53.729581 23.502434 54.814453 23.505859 C 55.899326 23.502359 56.976198 23.320563 58.001953 22.966797 L 56.794922 17.017578 L 61.335938 21.039062 C 61.496935 20.89979 61.652997 20.754855 61.804688 20.605469 C 63.187426 19.218881 64.128308 17.453676 64.507812 15.53125 L 58.757812 13.605469 L 64.507812 11.683594 C 64.128343 9.7611672 63.187425 7.9940104 61.804688 6.6074219 C 61.652998 6.4580369 61.496935 6.3131014 61.335938 6.1738281 L 56.796875 10.195312 L 58.001953 4.2460938 C 56.976198 3.892328 55.899326 3.7104568 54.814453 3.7070312 z "
-       xlink:href="#path4468"
-       style="opacity:1;fill:url(#linearGradient4526);fill-opacity:1;stroke:url(#linearGradient4434);stroke-width:0.9892233;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4443"
-       d="m 54.8125,3.2421875 c -1.135761,0.00359 -2.26189,0.1940319 -3.335938,0.5644531 a 0.46408245,0.46408245 0 0 0 -0.304687,0.53125 l 0.931641,4.5878906 -3.5,-3.0996093 a 0.46408245,0.46408245 0 0 0 -0.611328,-0.00391 C 47.822934,5.9686805 47.658148,6.1215986 47.5,6.2773438 a 0.46408245,0.46408245 0 0 0 -0.002,0.00195 C 46.05043,7.7309453 45.065232,9.581363 44.667969,11.59375 a 0.46408245,0.46408245 0 0 0 0.308593,0.529297 l 4.4375,1.484375 -4.4375,1.484375 a 0.46408245,0.46408245 0 0 0 -0.308593,0.529297 c 0.397274,2.012444 1.382614,3.861006 2.830078,5.3125 a 0.46408245,0.46408245 0 0 0 0.002,0.002 c 0.158151,0.155749 0.322936,0.308666 0.492188,0.455078 a 0.46408245,0.46408245 0 0 0 0.611328,-0.0039 l 3.5,-3.09961 -0.931641,4.587891 a 0.46408245,0.46408245 0 0 0 0.304687,0.53125 c 1.074021,0.370424 2.200175,0.560867 3.335938,0.564453 a 0.46408245,0.46408245 0 0 0 0.0039,0 c 1.135722,-0.0037 2.261872,-0.194026 3.335938,-0.564453 A 0.46408245,0.46408245 0 0 0 58.457031,22.875 l -0.93164,-4.589844 3.501953,3.101563 a 0.46408245,0.46408245 0 0 0 0.611328,0.0039 c 0.169252,-0.146414 0.334038,-0.299332 0.492187,-0.455078 a 0.46408245,0.46408245 0 0 0 0.002,-0.002 c 1.447464,-1.451494 2.432804,-3.300056 2.830079,-5.3125 a 0.46408245,0.46408245 0 0 0 -0.308594,-0.529297 l -4.4375,-1.486328 4.4375,-1.482422 A 0.46408245,0.46408245 0 0 0 64.962891,11.59375 C 64.565662,9.5813519 63.580426,7.7309425 62.132812,6.2792969 a 0.46408245,0.46408245 0 0 0 -0.002,-0.00195 C 61.97271,6.1215979 61.807923,5.9686793 61.638672,5.8222656 a 0.46408245,0.46408245 0 0 0 -0.611328,0.00391 l -3.5,3.1015625 0.929687,-4.5898438 a 0.46408245,0.46408245 0 0 0 -0.304687,-0.53125 C 57.078298,3.43622 55.95217,3.2457738 54.816406,3.2421875 a 0.46408245,0.46408245 0 0 0 -0.0039,0 z"
-       inkscape:href="#path4468"
-       transform="translate(-22.735586)" />
-    <path
-       inkscape:href="#path4468"
-       d="m 54.8125,4.1933594 c -0.888505,0.00318 -1.766397,0.1572767 -2.617188,0.4082031 L 53.3125,10.097656 a 0.4869683,0.4869683 0 0 1 -0.798828,0.462891 L 48.302734,6.8300781 c -0.04455,0.042299 -0.09086,0.081766 -0.134765,0.125 -1.211927,1.2167288 -2.016154,2.7596114 -2.423828,4.4238279 l 5.283203,1.767578 a 0.4869683,0.4869683 0 0 1 0,0.921875 l -5.283203,1.767579 c 0.407646,1.663899 1.211754,3.205001 2.423828,4.421874 0.0439,0.04323 0.09021,0.0827 0.134765,0.125 l 4.208985,-3.730468 a 0.4869683,0.4869683 0 0 1 0.798828,0.46289 l -1.115235,5.496094 c 0.852018,0.251293 1.731274,0.405394 2.621094,0.408203 0.888542,-0.0032 1.766407,-0.157292 2.617188,-0.408203 l -1.115235,-5.496094 a 0.4869683,0.4869683 0 0 1 0.798829,-0.46289 l 4.210937,3.730468 c 0.04322,-0.04103 0.08826,-0.07918 0.130859,-0.121093 1.21414,-1.217521 2.019652,-2.760098 2.427735,-4.425781 l -5.283203,-1.769532 a 0.4869683,0.4869683 0 0 1 0,-0.921875 l 5.283203,-1.765625 C 63.479068,9.7146987 62.674819,8.1718096 61.462891,6.9550781 l -0.0039,-0.00391 c -0.0426,-0.041909 -0.08764,-0.080065 -0.130859,-0.1210938 L 57.119141,10.560547 A 0.4869683,0.4869683 0 0 1 56.320312,10.099609 L 57.433594,4.6015625 C 56.582803,4.3506351 55.70491,4.1965336 54.816406,4.1933594 l -0.0039,0 z"
-       id="path4445"
-       style="opacity:0.3;fill:#34a1ca;fill-opacity:1;stroke:url(#radialGradient4453);stroke-width:0.9892233;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       xlink:href="#path4468"
-       inkscape:original="M 54.814453 3.7070312 C 53.729581 3.7104612 52.652708 3.8923279 51.626953 4.2460938 L 52.835938 10.195312 L 48.294922 6.1738281 C 48.133924 6.3131014 47.977862 6.4580369 47.826172 6.6074219 C 46.443434 7.9940104 45.502551 9.7611672 45.123047 11.683594 L 50.873047 13.607422 L 45.123047 15.53125 C 45.502551 17.453676 46.443434 19.218881 47.826172 20.605469 C 47.977861 20.754855 48.133925 20.89979 48.294922 21.039062 L 52.833984 17.017578 L 51.626953 22.966797 C 52.652675 23.320563 53.729581 23.502434 54.814453 23.505859 C 55.899326 23.502359 56.976198 23.320563 58.001953 22.966797 L 56.794922 17.017578 L 61.335938 21.039062 C 61.496935 20.89979 61.652997 20.754855 61.804688 20.605469 C 63.187426 19.218881 64.128308 17.453676 64.507812 15.53125 L 58.757812 13.605469 L 64.507812 11.683594 C 64.128343 9.7611672 63.187425 7.9940104 61.804688 6.6074219 C 61.652998 6.4580369 61.496935 6.3131014 61.335938 6.1738281 L 56.796875 10.195312 L 58.001953 4.2460938 C 56.976198 3.892328 55.899326 3.7104568 54.814453 3.7070312 z "
-       inkscape:radius="-0.48691961"
-       sodipodi:type="inkscape:offset"
-       transform="translate(-22.735586)" />
-  </g>
-</svg>
diff --git a/SparkleShare/Common/NoteController.cs b/SparkleShare/Common/NoteController.cs
index 51e20828..c989a793 100644
--- a/SparkleShare/Common/NoteController.cs
+++ b/SparkleShare/Common/NoteController.cs
@@ -39,8 +39,7 @@ namespace SparkleShare {
             SparkleShare.Controller.ShowNoteWindowEvent += OnNoteWindowEvent;
 
             if (SparkleShare.Controller.AvatarsEnabled && !SparkleShare.Controller.FirstRun)
-                AvatarFilePath = Avatars.GetAvatar (SparkleShare.Controller.CurrentUser.Email,
-                    48, SparkleShare.Controller.Config.DirectoryPath);
+                AvatarFilePath = Avatars.GetAvatar (SparkleShare.Controller.CurrentUser.Email, 48, SparkleShare.Controller.Config.DirectoryPath, SparkleShare.Controller.AvatarsProvider);
         }
 
 
@@ -73,7 +72,7 @@ namespace SparkleShare {
 
 
         void ResumeWithNote (string note)
-        {
+        {
             BaseRepository repo = SparkleShare.Controller.GetRepoByName (CurrentProject);
             repo.Resume (note);
         }
diff --git a/SparkleShare/Common/Presets/meson.build b/SparkleShare/Common/Presets/meson.build
index 8885f44f..9915c658 100644
--- a/SparkleShare/Common/Presets/meson.build
+++ b/SparkleShare/Common/Presets/meson.build
@@ -1,7 +1,6 @@
 preset_files = ['github.xml', 'github.png',
     'gitlab.xml', 'gitlab.png',
     'bitbucket.xml', 'bitbucket.png',
-    'planio.xml', 'planio.png',
     'own-server.xml', 'own-server.png'
 ]
 
diff --git a/SparkleShare/Common/Presets/planio.png b/SparkleShare/Common/Presets/planio.png
deleted file mode 100644
index d6ad0c47..00000000
Binary files a/SparkleShare/Common/Presets/planio.png and /dev/null differ
diff --git a/SparkleShare/Common/Presets/planio.xml b/SparkleShare/Common/Presets/planio.xml
deleted file mode 100644
index 730094ac..00000000
--- a/SparkleShare/Common/Presets/planio.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<sparkleshare>
-  <preset>
-    <info>
-        <name>Planio</name>
-        <description>Online project management</description>
-        <icon>planio.png</icon>
-        <backend>Git</backend>
-        <fingerprint>38:29:13:0f:7c:74:67:22:c5:a6:a6:95:b4:b8:e0:ef:3d:e0:9e:87:02:58:ff:37:2c:8b:34:5a:ed:73:5d:81</fingerprint>
-        <announcements_url>tcp://sparkleshare-notifications.plan.io:443</announcements_url>
-    </info>
-    <address>
-      <value/>
-      <example>ssh://git@[account].plan.io</example>
-    </address>
-    <path>
-      <value/>
-      <example>/[account]-[project].git</example>
-    </path>
-  </preset>
-</sparkleshare>
-
diff --git a/SparkleShare/Common/Presets/planio@2x.png b/SparkleShare/Common/Presets/planio@2x.png
deleted file mode 100644
index 5bbad90e..00000000
Binary files a/SparkleShare/Common/Presets/planio@2x.png and /dev/null differ
diff --git a/SparkleShare/Common/SetupController.cs b/SparkleShare/Common/SetupController.cs
index 3e34173a..00e0b0aa 100644
--- a/SparkleShare/Common/SetupController.cs
+++ b/SparkleShare/Common/SetupController.cs
@@ -533,7 +533,7 @@ namespace SparkleShare {
 
         public void ShowFilesClicked ()
         {
-            string folder_name = Path.GetFileName (PreviousPath);
+            string folder_name = Path.GetFileNameWithoutExtension (PreviousPath);
             folder_name = folder_name.ReplaceUnderscoreWithSpace ();
 
             SparkleShare.Controller.OpenSparkleShareFolder (folder_name);
diff --git a/SparkleShare/Linux/SparkleShare.Linux.csproj b/SparkleShare/Linux/SparkleShare.Linux.csproj
index 4f5b6455..e23800a2 100644
--- a/SparkleShare/Linux/SparkleShare.Linux.csproj
+++ b/SparkleShare/Linux/SparkleShare.Linux.csproj
@@ -125,15 +125,6 @@
     <None Include="..\Common\Presets\own-server%402x.png">
       <Link>Presets\own-server%402x.png</Link>
     </None>
-    <None Include="..\Common\Presets\planio.png">
-      <Link>Presets\planio.png</Link>
-    </None>
-    <None Include="..\Common\Presets\planio.xml">
-      <Link>Presets\planio.xml</Link>
-    </None>
-    <None Include="..\Common\Presets\planio%402x.png">
-      <Link>Presets\planio%402x.png</Link>
-    </None>
     <None Include="org.sparkleshare.SparkleShare.appdata.xml" />
     <None Include="org.sparkleshare.SparkleShare.desktop" />
     <None Include="org.sparkleshare.SparkleShare.Invites.desktop" />
diff --git a/SparkleShare/Linux/UserInterface.cs b/SparkleShare/Linux/UserInterface.cs
index f05d5437..433e532d 100644
--- a/SparkleShare/Linux/UserInterface.cs
+++ b/SparkleShare/Linux/UserInterface.cs
@@ -101,7 +101,10 @@ namespace SparkleShare
                 StatusIcon.use_appindicator = true;
             #else
             if (StatusIcon.use_appindicator) {
-                Console.WriteLine ("AppIndicator not installed.");
+                Console.ForegroundColor = ConsoleColor.Red;
+                Console.WriteLine ("error: AppIndicator not found. Install AppIndicator or run with --status-icon=gtk");
+                Console.ResetColor ();
+
                 Environment.Exit (-1);
             }
             #endif
diff --git a/SparkleShare/Mac/Controller.cs b/SparkleShare/Mac/Controller.cs
index bdd01134..db7510ba 100644
--- a/SparkleShare/Mac/Controller.cs
+++ b/SparkleShare/Mac/Controller.cs
@@ -51,6 +51,16 @@ namespace SparkleShare {
                 Path.Combine (GitCommand.ExecPath, "git-lfs"),
                 Path.Combine (Config.BinPath, "git-lfs"),
                 overwite);
+            
+            NSWorkspace.Notifications.ObserveDidWake((object sender, NSNotificationEventArgs e) => {
+                Console.Write ("Detected wake from sleep, checking for updates\n");
+                if (SparkleShare.Controller.RepositoriesLoaded) {
+                    foreach (var repo in SparkleShare.Controller.Repositories) {
+                        repo.SyncDown();
+                        repo.SyncUp();
+                    }
+                }
+            });
         }
 
 
diff --git a/SparkleShare/Mac/Info.plist b/SparkleShare/Mac/Info.plist
index 5616f171..adb4de25 100755
--- a/SparkleShare/Mac/Info.plist
+++ b/SparkleShare/Mac/Info.plist
@@ -9,13 +9,13 @@
 	<key>CFBundleName</key>
 	<string>SparkleShare</string>
 	<key>CFBundleShortVersionString</key>
-	<string>3.28.0</string>
+	<string>3.38.0</string>
 	<key>CFBundleVersion</key>
-	<string>3.28.0</string>
+	<string>3.38.0</string>
 	<key>LSApplicationCategoryType</key>
 	<string>public.app-category.utilities</string>
 	<key>LSMinimumSystemVersion</key>
-	<string>10.7</string>
+	<string>10.9</string>
 	<key>LSUIElement</key>
 	<string>1</string>
 	<key>NSMainNibFile</key>
diff --git a/SparkleShare/Mac/SparkleShare.Mac.csproj b/SparkleShare/Mac/SparkleShare.Mac.csproj
index 6c8017a6..07501fca 100644
--- a/SparkleShare/Mac/SparkleShare.Mac.csproj
+++ b/SparkleShare/Mac/SparkleShare.Mac.csproj
@@ -13,6 +13,7 @@
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <MonoMacResourcePrefix>Resources</MonoMacResourcePrefix>
     <ReleaseVersion></ReleaseVersion>
+    <UseXamMacFullFramework>true</UseXamMacFullFramework>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -40,6 +41,8 @@
     <TlsProvider>Default</TlsProvider>
     <LinkMode>None</LinkMode>
     <UseMSBuildEngine>True</UseMSBuildEngine>
+    <AOTMode>None</AOTMode>
+    <LangVersion>latest</LangVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <Optimize>False</Optimize>
@@ -67,6 +70,10 @@
     <LinkMode>None</LinkMode>
     <HttpClientHandler>HttpClientHandler</HttpClientHandler>
     <TlsProvider>Default</TlsProvider>
+    <AOTMode>None</AOTMode>
+    <CodeSigningKey>Mac Developer</CodeSigningKey>
+    <PackageSigningKey>3rd Party Mac Developer Installer</PackageSigningKey>
+    <LangVersion>latest</LangVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseDist|AnyCPU' ">
     <Optimize>false</Optimize>
@@ -94,6 +101,8 @@
     <HttpClientHandler>HttpClientHandler</HttpClientHandler>
     <TlsProvider>Default</TlsProvider>
     <LinkMode>None</LinkMode>
+    <AOTMode>None</AOTMode>
+    <LangVersion>latest</LangVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseMac|AnyCPU' ">
     <DebugType>none</DebugType>
@@ -122,6 +131,8 @@
     <LinkMode>None</LinkMode>
     <CodeSigningKey>Mac Developer</CodeSigningKey>
     <PackageSigningKey>3rd Party Mac Developer Installer</PackageSigningKey>
+    <AOTMode>None</AOTMode>
+    <LangVersion>latest</LangVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugMac|AnyCPU' ">
     <Optimize>False</Optimize>
@@ -149,6 +160,8 @@
     <LinkMode>None</LinkMode>
     <HttpClientHandler>HttpClientHandler</HttpClientHandler>
     <TlsProvider>Default</TlsProvider>
+    <AOTMode>None</AOTMode>
+    <LangVersion>latest</LangVersion>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
@@ -268,12 +281,6 @@
     <BundleResource Include="..\Common\Presets\own-server%402x.png">
       <Link>Presets\own-server%402x.png</Link>
     </BundleResource>
-    <BundleResource Include="..\Common\Presets\planio.png">
-      <Link>Presets\planio.png</Link>
-    </BundleResource>
-    <BundleResource Include="..\Common\Presets\planio%402x.png">
-      <Link>Presets\planio%402x.png</Link>
-    </BundleResource>
     <BundleResource Include="..\Common\Presets\bitbucket.xml">
       <Link>Presets\bitbucket.xml</Link>
     </BundleResource>
@@ -286,9 +293,6 @@
     <BundleResource Include="..\Common\Presets\own-server.xml">
       <Link>Presets\own-server.xml</Link>
     </BundleResource>
-    <BundleResource Include="..\Common\Presets\planio.xml">
-      <Link>Presets\planio.xml</Link>
-    </BundleResource>
     <BundleResource Include="..\Common\HTML\day-entry.html">
       <Link>HTML\day-entry.html</Link>
     </BundleResource>
diff --git a/SparkleShare/Mac/UserInterface/Bubbles.cs b/SparkleShare/Mac/UserInterface/Bubbles.cs
old mode 100755
new mode 100644
index d00fba7c..718308d1
--- a/SparkleShare/Mac/UserInterface/Bubbles.cs
+++ b/SparkleShare/Mac/UserInterface/Bubbles.cs
@@ -22,7 +22,7 @@ namespace SparkleShare {
     
     public class Bubbles : NSObject {
 
-        public BubblesController Controller = new BubblesController ();
+        public BubblesController Controller = new BubblesController (false);
 
 
         public Bubbles ()
diff --git a/SparkleShare/Mac/UserInterface/EventLog.cs b/SparkleShare/Mac/UserInterface/EventLog.cs
index b0af2004..fdb94fa7 100644
--- a/SparkleShare/Mac/UserInterface/EventLog.cs
+++ b/SparkleShare/Mac/UserInterface/EventLog.cs
@@ -27,7 +27,7 @@ namespace SparkleShare {
 
     public class EventLog : NSWindow {
 
-        public EventLogController Controller = new EventLogController ();
+        public EventLogController Controller = new EventLogController (false);
         public float TitlebarHeight;
 
         WebView web_view;
diff --git a/SparkleShare/Mac/Watcher.cs b/SparkleShare/Mac/Watcher.cs
old mode 100755
new mode 100644
index e8de3ae5..ca1352af
--- a/SparkleShare/Mac/Watcher.cs
+++ b/SparkleShare/Mac/Watcher.cs
@@ -149,6 +149,10 @@ namespace SparkleShare {
             if (handler != null) {
                 List<string> filtered_paths = new List<string> ();
                 foreach (var path in paths) {
+                    if (path.EndsWith(".git")
+                        || path.Contains ("/.git/"))
+                        continue;
+
                     if (path.Length > BasePath.Length) {
                         var t = path.Substring (BasePath.Length);
                         t = t.Trim ("/".ToCharArray ());
diff --git a/SparkleShare/Mac/checkGit.sh b/SparkleShare/Mac/checkGit.sh
index 2a18a1fa..06f0a6b6 100755
--- a/SparkleShare/Mac/checkGit.sh
+++ b/SparkleShare/Mac/checkGit.sh
@@ -1,4 +1,4 @@
-#!/bin/sh                                                                                                                                          
+#!/bin/sh
 function abspath()
 {
   case "${1}" in
@@ -11,6 +11,8 @@ function abspath()
   esac
 }
 
+export projectFolder=$(dirname $0)
+export projectFolder=$(abspath ${projectFolder})
 
 LINE=$(cat ${projectFolder}/git.download)
 TMP=()
@@ -19,23 +21,22 @@ for val in $LINE ; do
         TMP+=("$val")
 done
 
-export projectFolder=$(dirname $0)
-export projectFolder=$(abspath ${projectFolder})
 export gitDownload="${TMP[0]}"
+export gitName=${gitDownload##*/}
 export gitSHA256="${TMP[1]}"
 
+
 set -e
 
 
-if [ ! -f ${projectFolder}/git.tar.gz ]
+if [[ ! -f ${projectFolder}/${gitName} ]];
 then
-  curl --silent --location ${gitDownload} > git.tar.gz
-  test -e git.tar.gz || { echo "Failed to download git"; exit 1; }
+  curl --silent --location ${gitDownload} > ${projectFolder}/${gitName}
+  test -e ${projectFolder}/${gitName} || { echo "Failed to download git"; exit 1; }
 
-  printf "${gitSHA256}  git.tar.gz" | shasum --check --algorithm 256
+  printf "${gitSHA256}  ${projectFolder}/${gitName}" | shasum --check --algorithm 256
 
-  mkdir git/
-  tar xzf git.tar.gz --directory git/
-  tar czf git.tar.gz git/
-  rm -rf git/
 fi
+
+rm -f ${projectFolder}/git.tar.gz
+ln -s ${projectFolder}/$gitName ${projectFolder}/git.tar.gz
diff --git a/SparkleShare/Mac/config b/SparkleShare/Mac/config
deleted file mode 100644
index 83138436..00000000
--- a/SparkleShare/Mac/config
+++ /dev/null
@@ -1,2 +0,0 @@
-<configuration>
-</configuration>
diff --git a/SparkleShare/Mac/git.download b/SparkleShare/Mac/git.download
index 6d45ac8e..84d2e19d 100644
--- a/SparkleShare/Mac/git.download
+++ b/SparkleShare/Mac/git.download
@@ -1 +1 @@
-https://github.com/desktop/dugite-native/releases/download/v2.16.2/dugite-native-v2.16.2-macOS-119.tar.gz 65d608eb16e0e262bae6bd7828b28cf640455e949003fec94c1233e084b9ccde
+https://github.com/desktop/dugite-native/releases/download/v2.29.2-2/dugite-native-v2.29.2-f9ceb12-macOS.tar.gz ff16488ebbb3a0000fac34c8afc01bc4e839ad478717fbcbbe0c207642b5872c
diff --git a/SparkleShare/Mac/packReleaseDist.sh b/SparkleShare/Mac/packReleaseDist.sh
index 6305f7bb..352c6025 100755
--- a/SparkleShare/Mac/packReleaseDist.sh
+++ b/SparkleShare/Mac/packReleaseDist.sh
@@ -8,12 +8,17 @@ echo packing ${bundle} for release without Mono framework dependency
 
 export MONO_PATH=`readlink /Library/Frameworks/Mono.framework/Versions/Current`
 export PKG_CONFIG_PATH=/usr/lib/pkgconfig:${MONO_PATH}/lib/pkgconfig
-export AS="as -arch i386"
-export CC="cc -arch i386 -lobjc -liconv -framework Foundation"
 export PATH=/usr/local/bin:/opt/local/bin:/Library/Frameworks/Mono.framework/Versions/Current/bin:/usr/bin:/bin
 
 cd ${bundle}/Contents/MonoBundle/
 
 # merge all Assemblies into one Mac binary
-mkbundle --static --deps --config ./config  -o ../MacOS/SparkleShare SparkleShare.exe Sparkles.dll Xamarin.Mac.dll Sparkles.Git.dll
+mkbundle \
+	 --simple \
+	 -v \
+	--config ./config \
+	 --library libxammac.dylib \
+	 --library libmono-native-compat.0.dylib \
+	 -o ../MacOS/SparkleShare \
+	 SparkleShare.exe Sparkles.dll Sparkles.Git.dll
 rm *.dll *.exe
diff --git a/SparkleShare/Mac/postBuild.sh b/SparkleShare/Mac/postBuild.sh
index 6fe1222d..e910eff4 100755
--- a/SparkleShare/Mac/postBuild.sh
+++ b/SparkleShare/Mac/postBuild.sh
@@ -9,6 +9,7 @@ echo Postprocessing ${bundle}...
 export PATH=/usr/local/bin:/opt/local/bin:/Library/Frameworks/Mono.framework/Versions/Current/bin:/usr/bin:/bin
 
 ${projectFolder}/checkGit.sh
-tar -x -f ${projectFolder}/git.tar.gz --directory ${bundle}/Contents/Resources
-cp -R SparkleShareInviteOpener.app ${bundle}/Contents/Resources
-cp config ${bundle}/Contents/MonoBundle
+rm -rf ${bundle}/Contents/Resources/git
+mkdir -p ${bundle}/Contents/Resources/git
+tar -x -f ${projectFolder}/git.tar.gz --directory ${bundle}/Contents/Resources/git
+cp -R ${projectFolder}/SparkleShareInviteOpener.app ${bundle}/Contents/Resources
diff --git a/SparkleShare/Windows/SparkleShare.Windows.csproj b/SparkleShare/Windows/SparkleShare.Windows.csproj
index a3c32c1d..56e3d0d3 100644
--- a/SparkleShare/Windows/SparkleShare.Windows.csproj
+++ b/SparkleShare/Windows/SparkleShare.Windows.csproj
@@ -265,10 +265,6 @@
       <Link>Presets\bitbucket.png</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
-    <None Include="..\Common\Presets\planio.png">
-      <Link>Presets\planio.png</Link>
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-    </None>
     <None Include="app.config" />
     <None Include="packages.config" />
   </ItemGroup>
@@ -285,10 +281,6 @@
       <Link>Presets\own-server.xml</Link>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
-    <None Include="..\Common\Presets\planio.xml">
-      <Link>Presets\planio.xml</Link>
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-    </None>
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Images\folder.png">
diff --git a/SparkleShare/Windows/SparkleShare.wxs b/SparkleShare/Windows/SparkleShare.wxs
index aadac8be..09a6deb4 100644
--- a/SparkleShare/Windows/SparkleShare.wxs
+++ b/SparkleShare/Windows/SparkleShare.wxs
@@ -2,7 +2,7 @@
 <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
 
   <Product Name='SparkleShare' Id='184950D5-67F6-4D06-9717-7E2F1607A7B0' UpgradeCode='D3DF1D99-87F5-47A7-A349-863DD6E4B73A'
-    Language='1033' Codepage='1252' Version='3.28.0' Manufacturer='SparkleShare'>
+    Language='1033' Codepage='1252' Version='3.38.0' Manufacturer='SparkleShare'>
 
     <Package Id='*' Keywords='Installer' Description="SparkleShare Setup" Manufacturer='SparkleShare'
       InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
diff --git a/Sparkles/Command.cs b/Sparkles/Command.cs
index b186a7e7..b49bc0ec 100644
--- a/Sparkles/Command.cs
+++ b/Sparkles/Command.cs
@@ -41,6 +41,7 @@ namespace Sparkles {
             StartInfo.WorkingDirectory = Path.GetTempPath ();
             StartInfo.CreateNoWindow = true;
             StartInfo.RedirectStandardOutput = true;
+            StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
             StartInfo.RedirectStandardError = true;
             StartInfo.UseShellExecute = false;
 
diff --git a/Sparkles/Configuration.cs b/Sparkles/Configuration.cs
index c1e31edd..83f5bb35 100644
--- a/Sparkles/Configuration.cs
+++ b/Sparkles/Configuration.cs
@@ -2,8 +2,8 @@
 //   Copyright (C) 2010  Hylke Bons <hi@planetpeanut.uk>
 //
 //   This program is free software: you can redistribute it and/or modify
-//   it under the terms of the GNU Lesser General Public License as 
-//   published by the Free Software Foundation, either version 3 of the 
+//   it under the terms of the GNU Lesser General Public License as
+//   published by the Free Software Foundation, either version 3 of the
 //   License, or (at your option) any later version.
 //
 //   This program is distributed in the hope that it will be useful,
@@ -32,10 +32,10 @@ namespace Sparkles {
                 app_data_path = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), ".config");
 
             string config_path = Path.Combine (app_data_path, "org.sparkleshare.SparkleShare");
-            
+
             return new Configuration (config_path, "projects.xml");
         });
-        
+
         public static Configuration DefaultConfiguration { get { return ConfigLazy.Value; } }
         public static bool DebugMode = true;
 
@@ -43,6 +43,7 @@ namespace Sparkles {
         public readonly string FilePath;
         public readonly string TmpPath;
         public readonly string BinPath;
+        public string AvatarProvider;
 
         public readonly string LogFilePath;
 
@@ -51,7 +52,7 @@ namespace Sparkles {
             get {
                 if (InstallationInfo.OperatingSystem == OS.Windows)
                     return Environment.GetFolderPath (Environment.SpecialFolder.UserProfile);
-                
+
                 return Environment.GetFolderPath (Environment.SpecialFolder.Personal);
             }
         }
@@ -59,9 +60,9 @@ namespace Sparkles {
 
         public string FoldersPath {
             get {
-                if (GetConfigOption ("folders_path") != null)                      
+                if (GetConfigOption ("folders_path") != null)
                     return GetConfigOption ("folders_path");
-                
+
                 return Path.Combine (HomePath, "SparkleShare");
             }
         }
@@ -336,15 +337,15 @@ namespace Sparkles {
         {
             return SelectSingleNode (string.Format ("/sparkleshare/folder[name=\"{0}\"]", name));
         }
-        
-        
+
+
         string FolderValueByKey (string name, string key)
         {
             XmlNode folder = FolderByName(name);
-            
+
             if ((folder != null) && (folder [key] != null))
                 return folder [key].InnerText;
-            
+
             return null;
         }
 
diff --git a/Sparkles/Git/Git.Command.cs b/Sparkles/Git/Git.Command.cs
index ba314c7d..ffec4f60 100644
--- a/Sparkles/Git/Git.Command.cs
+++ b/Sparkles/Git/Git.Command.cs
@@ -99,7 +99,8 @@ namespace Sparkles.Git {
             SetEnvironmentVariable ("PREFIX", "");
             SetEnvironmentVariable ("HOME", "");
 
-            SetEnvironmentVariable ("LANG", "en_US");
+            SetEnvironmentVariable ("LANG", "en_US.UTF8");
+            SetEnvironmentVariable ("LC_ALL", "en_US.UTF8");
         }
 
 
diff --git a/Sparkles/Git/Git.Fetcher.cs b/Sparkles/Git/Git.Fetcher.cs
index 81bcfd52..052638f6 100644
--- a/Sparkles/Git/Git.Fetcher.cs
+++ b/Sparkles/Git/Git.Fetcher.cs
@@ -176,6 +176,13 @@ namespace Sparkles.Git {
                 File.WriteAllText (identifier_path, identifier);
                 File.SetAttributes (identifier_path, FileAttributes.Hidden);
 
+                // The repo is freshly cloned and no config user.name is set yet, so temporary use SparkleShare
+                // to avoid error 'TELL ME WHO YOU ARE', later on this will be handled in Commit of Git.Repository
+                var git_config = new GitCommand(TargetFolder, "config user.name \"SparkleShare\"");
+                git_config.StartAndWaitForExit();
+                git_config = new GitCommand(TargetFolder, "config user.email \"info@sparkleshare.org\"");
+                git_config.StartAndWaitForExit();
+                
                 // We can't do the "commit --all" shortcut because it doesn't add untracked files
                 var git_add    = new GitCommand (TargetFolder, "add .sparkleshare");
                 var git_commit = new GitCommand (TargetFolder,
diff --git a/Sparkles/Git/Git.Repository.cs b/Sparkles/Git/Git.Repository.cs
index b7136fc7..ac19964c 100644
--- a/Sparkles/Git/Git.Repository.cs
+++ b/Sparkles/Git/Git.Repository.cs
@@ -178,7 +178,7 @@ namespace Sparkles.Git {
                 string remote_revision = "" + output.Substring (0, 40);
 
                 if (!remote_revision.Equals (current_revision)) {
-                    git = new GitCommand (LocalPath, "merge-base " + remote_revision + " master");
+                    git = new GitCommand (LocalPath, "merge-base " + remote_revision + " " + this.branch);
                     git.StartAndWaitForExit ();
 
                     if (git.ExitCode != 0) {
@@ -435,6 +435,7 @@ namespace Sparkles.Git {
             git.StartAndWaitForExit ();
 
             git = new GitCommand (LocalPath, "merge --no-edit FETCH_HEAD");
+            git.StartInfo.StandardOutputEncoding = null;
             git.StartInfo.RedirectStandardOutput = false;
 
             string error_output = git.StartAndReadStandardError ();
@@ -616,6 +617,7 @@ namespace Sparkles.Git {
             var git = new GitCommand (LocalPath,
                 "commit --message=\"Conflict resolution\" --author=\"SparkleShare <info@sparkleshare.org>\"");
 
+            git.StartInfo.StandardOutputEncoding = null;
             git.StartInfo.RedirectStandardOutput = false;
             git.StartAndWaitForExit ();
 
@@ -934,7 +936,12 @@ namespace Sparkles.Git {
                         string HEAD_file_path = Path.Combine (child_path, "HEAD");
 
                         if (File.Exists (HEAD_file_path)) {
-                            File.Move (HEAD_file_path, HEAD_file_path + ".backup");
+                            string HEAD_file_path_backup = Path.Combine (child_path, "HEAD.backup");
+                            if (File.Exists (HEAD_file_path_backup)) {
+                                File.Delete (HEAD_file_path_backup);
+                            }
+
+                            File.Move (HEAD_file_path, HEAD_file_path_backup);
                             Logger.LogInfo ("Git", Name + " | Renamed " + HEAD_file_path);
                         }
 
diff --git a/Sparkles/InstallationInfo.Directory.cs b/Sparkles/InstallationInfo.Directory.cs
index f7e1bd7d..ab18fb47 100644
--- a/Sparkles/InstallationInfo.Directory.cs
+++ b/Sparkles/InstallationInfo.Directory.cs
@@ -18,7 +18,7 @@
 using System.Reflection;
 
 [assembly:AssemblyTitle ("Sparkles")]
-[assembly:AssemblyVersion ("3.28.0")]
+[assembly:AssemblyVersion ("3.38.0")]
 [assembly:AssemblyCopyright ("Copyright (c) 2010 Hylke Bons and others")]
 
 namespace Sparkles {
diff --git a/Sparkles/InstallationInfo.cs b/Sparkles/InstallationInfo.cs
index c3b47bc1..e2d4ef32 100644
--- a/Sparkles/InstallationInfo.cs
+++ b/Sparkles/InstallationInfo.cs
@@ -67,25 +67,35 @@ namespace Sparkles {
             get {
                 if (OperatingSystem == OS.macOS) {
                     var uname = new Command ("sw_vers", "-productVersion", write_output: false);
-                    string output = uname.StartAndReadStandardOutput ();
-                    string version = output;
+                    string version = uname.StartAndReadStandardOutput ();
+
+                    // 
+                    string[] version_elements= version.Split('.');
 
-                    // Parse the version number between the periods (e.g. "10.12.1" -> 12)
-                    output = output.Substring (output.IndexOf (".") + 1);
-                    if (output.LastIndexOf (".") != -1) {
-                        output = output.Substring (0, output.LastIndexOf ("."));
-                    }
                     string release = "Unreleased Version";
 
-                    switch (int.Parse (output)) {
-                    case 7: release = "Lion"; break;
-                    case 8: release = "Mountain Lion"; break;
-                    case 9: release = "Mavericks"; break;
-                    case 10: release = "Yosemite"; break;
-                    case 11: release = "El Capitan"; break;
-                    case 12: release = "Sierra"; break;
-                    case 13: release = "High Sierra"; break;
-                    case 14: release = "Mojave"; break;
+                    if ((version_elements.Length) >= 2) {
+                        switch (int.Parse (version_elements [0])) {
+                        case 10:
+                            // Parse the version number between the periods (e.g. "10.12.1" -> 12)
+                            switch (int.Parse (version_elements [0])) {
+                            case 7: release = "Lion"; break;
+                            case 8: release = "Mountain Lion"; break;
+                            case 9: release = "Mavericks"; break;
+                            case 10: release = "Yosemite"; break;
+                            case 11: release = "El Capitan"; break;
+                            case 12: release = "Sierra"; break;
+                            case 13: release = "High Sierra"; break;
+                            case 14: release = "Mojave"; break;
+                            case 15: release = "Catalina"; break;
+                            }
+                            break;
+
+                        case 11:
+                            release = "BigSur"; break;
+                        case 12:
+                            release = "Monterey"; break;
+                        }
                     }
 
                     return string.Format ("{0} ({1})", version, release);
diff --git a/debian/changelog b/debian/changelog
index 146ff4c9..68d70d5b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+sparkleshare (3.38+ds-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 26 Aug 2022 01:15:42 -0000
+
 sparkleshare (3.28+git20190525+cf446c0-3) unstable; urgency=medium
 
   * Suggest gnome-shell-extension-appindicator (Closes: #845616).
diff --git a/debian/patches/0001-Remove-post-install-scripts.patch b/debian/patches/0001-Remove-post-install-scripts.patch
index e933bbcc..d6706b68 100644
--- a/debian/patches/0001-Remove-post-install-scripts.patch
+++ b/debian/patches/0001-Remove-post-install-scripts.patch
@@ -6,16 +6,13 @@ Subject: Remove post-install scripts
  meson.build | 2 --
  1 file changed, 2 deletions(-)
 
-diff --git a/meson.build b/meson.build
-index 55a6785a..a6926aa6 100644
---- a/meson.build
-+++ b/meson.build
+Index: sparkleshare/meson.build
+===================================================================
+--- sparkleshare.orig/meson.build
++++ sparkleshare/meson.build
 @@ -12,5 +12,3 @@ subdir('Sparkles')
  subdir('Sparkles/Git')
  subdir('SparkleShare')
  
 -meson.add_install_script('scripts/post-install.sh')
 -
--- 
-2.11.0
-
diff --git a/meson.build b/meson.build
index 55a6785a..e5c9b5e6 100644
--- a/meson.build
+++ b/meson.build
@@ -6,7 +6,7 @@ configuration = configuration_data()
 configuration.set('ABS_INSTALL_DIR', join_paths(get_option('prefix'), install_dir))
 
 # This line is changed by scripts/bump-version.sh, so keep it intact
-configuration.set('VERSION', '3.28.0')
+configuration.set('VERSION', '3.38.0')
 
 subdir('Sparkles')
 subdir('Sparkles/Git')