diff --git a/kbdupdater b/kbdupdater
index 506913659fff27218a27c8876f6c4b27be8ffce5..2a45cc9b6982d270bc3d605aa85e77edb518c833 100755
--- a/kbdupdater
+++ b/kbdupdater
@@ -13,13 +13,16 @@ OBJ_PATH="/org/freedesktop/locale1"
 KEY="VConsoleKeymap"
 
 # Path to keyboard layouts
-SQUEEKBOARD_LAYOUT_PATH=/usr/share/squeekboard/keyboards
 TERMINAL_LAYOUT=terminal.yaml
 LOCAL_SQUEEKBOARD_PATH=$HOME/.local/share/squeekboard
 LOCAL_SQUEEKBOARD_LAYOUT_PATH=$LOCAL_SQUEEKBOARD_PATH/keyboards
+SQUEEKBOARD_LAYOUT_PATH=$LOCAL_SQUEEKBOARD_PATH/data
+
+# Squeekboard keyboards/data directory, with all yaml templates for keyboard layouts
+SQUEEKBOARD_REPOS=https://source.puri.sm/Librem5/squeekboard/-/raw/master/data/keyboards
 
 # Contry code (empty by default = US)
-CC=""
+CC="us"
 
 ################################################################################
 
@@ -28,12 +31,6 @@ CC=`gdbus introspect --system --dest $DEST --object-path $OBJ_PATH --only-proper
 
 #logger "kbdupdater: Country code=$CC"
 
-# Look for a template
-if [ ! -e "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" ]; then
-  logger "kbdupdater: Error, no layout found"
-  exit 0
-fi
-
 # Ensure all directories are valid
 if [ ! -d $LOCAL_SQUEEKBOARD_PATH ]; then
   mkdir $LOCAL_SQUEEKBOARD_PATH
@@ -51,6 +48,14 @@ if [ ! -d $LOCAL_SQUEEKBOARD_LAYOUT_PATH ]; then
   fi
 fi
 
+if [ ! -d $SQUEEKBOARD_LAYOUT_PATH ]; then
+  mkdir $SQUEEKBOARD_LAYOUT_PATH
+  if [ $? -ne 0 ]; then
+    logger "kbdupdater: Error, can't create $SQUEEKBOARD_LAYOUT_PATH"
+    exit 1
+  fi
+fi
+
 # Create/update/keep the current symlink to the template...
 
 if [ -f $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT ]; then
@@ -60,6 +65,15 @@ if [ -f $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT ]; then
   fi
 fi
 
+# Try to fetch the new layout, only if the selected template is missing locally
+if [ ! -f "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" ]; then
+  curl --fail "$SQUEEKBOARD_REPOS/$CC+$TERMINAL_LAYOUT" --output "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" 2>/dev/null
+  if [ $? -ne 0 ]; then
+    logger "kbdupdater: Error can't fetch the new layout from Internet"
+    exit 1
+  fi
+fi
+
 logger "kbdupdater: Updating keyboard layout"
 ln -s -f "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT
 if [ $? -ne 0 ]; then