diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh
index d0137db9..34793b98 100755
--- a/data_from_portwine/scripts/add_in_steam.sh
+++ b/data_from_portwine/scripts/add_in_steam.sh
@@ -100,23 +100,30 @@ getAppId() {
 getSteamId() {
 	unset SteamAppId
 	local cache_file="${PORT_WINE_TMP_PATH:-/tmp}/steamid_cache.json"
+	local applist_cache_file="${PORT_WINE_TMP_PATH:-/tmp}/steamapplist_cache.json"
 	[[ -n "${1:-}" ]] && NOSTAPPNAME="$1"
 	if [[ -z "${SteamIds:-}" ]] && [[ -f "${cache_file}" ]]; then
 		SteamIds=$(<"${cache_file}")
 	fi
-	if [[ -n "${SteamIds:-}" ]] && jq -e --arg key "$NOSTAPPNAME" 'has($key)' <<< "${SteamIds}" > /dev/null; then
+	if [[ -n "${SteamIds:-}" ]] && jq -e --arg key "${NOSTAPPNAME}" 'has($key)' <<< "${SteamIds}" > /dev/null; then
 		SteamAppId=$(jq -r --arg key "${NOSTAPPNAME}" '.[$key]' <<< "${SteamIds}")
 	else
-		if [[ -n "${1:-}" ]] && [[ "${USE_STEABGRIDDB:-1}" == "1" ]]; then
+		if [[ -n "${1:-}" ]] && [[ "${USE_STEAMGRIDDB:-1}" == "1" ]]; then
 			getSteamGridDBId "${NOSTAPPNAME}" > /dev/null
 		fi
-		if [[ $SteamGridDBTypeSteam == true ]]; then
+		if [[ ${SteamGridDBTypeSteam} == true ]]; then
 			SRES=$(curl -Ls --connect-timeout 5 -m 10 -e "https://www.steamgriddb.com/game/${SteamGridDBId}" "https://www.steamgriddb.com/api/public/game/${SteamGridDBId}")
 			if jq -e ".success == true" <<< "${SRES}" > /dev/null 2>&1; then
 				SteamAppId="$(jq -r '.data.platforms.steam.id' <<< "${SRES}")"
 			fi
-		elif [[ "${USE_STEABGRIDDB:-1}" == "0" ]]; then
-			SteamAppId="$(curl -s --connect-timeout 5 -m 10 "https://api.steampowered.com/ISteamApps/GetAppList/v2/" | jq --arg name "${NOSTAPPNAME}" '.applist.apps[] | select(.name == $name) | .appid')"
+		elif [[ "${USE_STEAMGRIDDB:-1}" == "0" ]]; then
+			if [[ ! -f "${applist_cache_file}" ]] || [[ $(find "${applist_cache_file}" -mmin +1440) ]]; then
+				applist_data=$(curl -s --connect-timeout 5 "https://api.steampowered.com/ISteamApps/GetAppList/v2/")
+				[[ -n "${applist_data}" ]] && echo "${applist_data}" > "${applist_cache_file}"
+			else
+				applist_data=$(<"${applist_cache_file}")
+			fi
+			[[ -n "${applist_data}" ]] && SteamAppId=$(jq --arg name "${NOSTAPPNAME,,}" '.applist.apps[] | select(.name == $name) | .appid' <<< "${applist_data,,}")
 		fi
 		SteamIds=$(jq --arg key "${NOSTAPPNAME}" --arg value "${SteamAppId:-}" '. + {($key): $value}' <<< "${SteamIds:-$(jq -n '{}')}")
 		echo "${SteamIds}" > "${cache_file}"
@@ -129,7 +136,7 @@ getSteamId() {
 getSteamGridDBId() {
 	unset SteamGridDBId
 	NOSTAPPNAME="$1"
-	if [[ "${USE_STEABGRIDDB:-1}" == "1" ]] && [[ -n "${SGDBAPIKEY}" ]] && [[ -n "${BASESTEAMGRIDDBAPI}" ]] && curl -fs --connect-timeout 5 -m 10 -o /dev/null "${BASESTEAMGRIDDBAPI}"; then
+	if [[ "${USE_STEAMGRIDDB:-1}" == "1" ]] && [[ -n "${SGDBAPIKEY}" ]] && [[ -n "${BASESTEAMGRIDDBAPI}" ]] && curl -fs --connect-timeout 5 -m 10 -o /dev/null "${BASESTEAMGRIDDBAPI}"; then
 		SGDBRES=$(curl -Ls --connect-timeout 5 -m 10 -H "Authorization: Bearer ${SGDBAPIKEY}" "${BASESTEAMGRIDDBAPI}/search/autocomplete/${NOSTAPPNAME// /_}")
 		if jq -e ".success == true and (.data | length > 0)" <<< "${SGDBRES}" > /dev/null 2>&1; then
 			if jq -e '.data[0].types | contains(["steam"])' <<< "${SGDBRES}" > /dev/null; then
@@ -141,7 +148,7 @@ getSteamGridDBId() {
 			echo "${SteamGridDBId}"
 		fi
 	else
-		USE_STEABGRIDDB="0"
+		USE_STEAMGRIDDB="0"
 	fi
 }
 
@@ -204,10 +211,12 @@ listInstalledSteamGames() {
 		jq -n '[]'
 	else
 		for manifest_file in "${manifests[@]}"; do
-			name="$(grep -Po '"name"\s+"\K[^"]+' "$manifest_file")";
-			if [[ ! "${name}" =~ ^(Proton |Steam Linux Runtime|Steamworks Common) ]]; then
+			name="$(grep -Po '"name"\s+"\K[^"]+' "${manifest_file}")";
+			stateflags="$(grep -Po '"StateFlags"\s+"\K\d+' "${manifest_file}")"
+# 			if [[ ! "${name}" =~ ^(Proton |Steam Linux Runtime|Steamworks Common) ]]; then
+			if ((stateflags & 4)) && grep -q '"SharedDepots"' "${manifest_file}"; then
 				jq -n \
-					--arg id "$(grep -Po '"appid"\s+"\K\d+' "$manifest_file")" \
+					--arg id "$(grep -Po '"appid"\s+"\K\d+' "${manifest_file}")" \
 					--arg name "${name}" \
 					'{id: $id, name: $name}'
 			fi
@@ -216,36 +225,47 @@ listInstalledSteamGames() {
 }
 
 listNonSteamGames() {
-    getSteamShortcutHex | while read -r SCVDFE; do
-        jq -n \
-            --arg id "$(parseSteamShortcutEntryAppID "${SCVDFE}")" \
-            --arg name "$(parseSteamShortcutEntryAppName "${SCVDFE}")" \
-            --arg exe "$(parseSteamShortcutEntryExe "${SCVDFE}")" \
-            --arg dir "$(parseSteamShortcutEntryStartDir "${SCVDFE}")" \
-            --arg icon "$(parseSteamShortcutEntryIcon "${SCVDFE}")" \
-            --arg args "$(parseSteamShortcutEntryLaunchOptions "${SCVDFE}")" \
-            '{id: $id, name: $name, exe: $exe, dir: $dir, icon: $icon, args: $args}'
-    done | jq -s '.'
+	getSteamShortcutHex | while read -r SCVDFE; do
+		jq -n \
+			--arg id "$(parseSteamShortcutEntryAppID "${SCVDFE}")" \
+			--arg name "$(parseSteamShortcutEntryAppName "${SCVDFE}")" \
+			--arg exe "$(parseSteamShortcutEntryExe "${SCVDFE}")" \
+			--arg dir "$(parseSteamShortcutEntryStartDir "${SCVDFE}")" \
+			--arg icon "$(parseSteamShortcutEntryIcon "${SCVDFE}")" \
+			--arg args "$(parseSteamShortcutEntryLaunchOptions "${SCVDFE}")" \
+			'{id: $id, name: $name, exe: $exe, dir: $dir, icon: $icon, args: $args}'
+	done | jq -s '.'
 }
 
 listSteamGames() {
 	(
-	 	jq -r 'map({AppId: .id, SteamAppId: .id, SteamGameId: .id, Name: .name}) | .[] | tostring' <<< "$(listInstalledSteamGames)"
+		jq -r 'map({AppId: .id, SteamAppId: .id, SteamGameId: .id, Name: .name}) | .[] | tostring' <<< "$(listInstalledSteamGames)"
 		jq -r '.[] | tostring' <<< "$(listNonSteamGames)" | while read -r game; do
 			id=$(jq -r '.id' <<< "${game}")
 			name=$(jq -r '.name' <<< "${game}")
-			jq -r \
-				--arg SteamAppId "$(getSteamId "${name}")" \
-				--arg SteamGameId "$(getSteamGameId $id)" \
-				'{AppId: .id, SteamAppId: ($SteamAppId | if . == "" then "0" else . end), SteamGameId: $SteamGameId, Name: .name} | tostring' <<< "${game}"
+			exe=$(jq -r '.exe' <<< "${game}")
+			if [[ "${name}" =~ ^[0-9]+$ ]] && [[ "${exe}" =~ .sh$ ]]; then
+				appid="${name}"
+				name=$(basename "${exe}" .sh)
+			else
+				appid="$(getSteamId "${name}")"
+				[[ -z "${appid}" ]] && appid="0"
+			fi
+			gid="$(getSteamGameId $id)"
+			jq -n \
+				--arg id "${id}" \
+				--arg appid "${appid}" \
+				--arg gid "${gid}" \
+				--arg name "${name}" \
+				'{AppId: $id, SteamAppId: $appid, SteamGameId: $gid, Name: $name}'
 		done
 	) | jq -s '.'
 }
 
 convertSteamShortcutAppID() {
-    SHORTCUTAPPIDHEX="$1"
-    SHORTCUTAPPIDLITTLEENDIAN="$( echo "${SHORTCUTAPPIDHEX}" | tac -rs .. | tr -d '\n' )"
-    echo "$((16#${SHORTCUTAPPIDLITTLEENDIAN}))"
+	SHORTCUTAPPIDHEX="$1"
+	SHORTCUTAPPIDLITTLEENDIAN="$( echo "${SHORTCUTAPPIDHEX}" | tac -rs .. | tr -d '\n' )"
+	echo "$((16#${SHORTCUTAPPIDLITTLEENDIAN}))"
 }
 
 convertSteamShortcutHex() {
@@ -350,8 +370,8 @@ downloadImageSteamGridDB() {
 }
 
 addGrids() {
-	getSteamGridDBId "${name_desktop}" > /dev/null
-	if [[ "${USE_STEABGRIDDB:-1}" == "0" ]]; then
+	[[ -z "${SteamGridDBId}" ]] && getSteamGridDBId "${name_desktop}" > /dev/null
+	if [[ -z "${SteamAppId}" ]] && [[ "${USE_STEAMGRIDDB:-1}" == "0" ]]; then
 		getSteamId > /dev/null
 	fi
 	if [[ -n "${SteamGridDBId}" ]] || [[ -n "${SteamAppId}" ]]; then
@@ -474,8 +494,8 @@ addNonSteamGame() {
 			fi
 			NOSTICONPATH="${PORT_WINE_PATH}/data/img/${name_desktop_png}.png"
 			NOSTAIDVDF="$(generateShortcutVDFAppId "${NOSTAPPNAME}${NOSTEXEPATH}")"  # signed integer AppID, stored in the VDF as hexidecimal - ex: -598031679
-			NOSTAIDVDFHEX="$(generateShortcutVDFHexAppId "$NOSTAIDVDF")"  # 4byte little-endian hexidecimal of above 32bit signed integer, which we write out to the binary VDF - ex: c1c25adc
-			NOSTAPPID="$(extractSteamId32 "$NOSTAIDVDF")"  # unsigned 32bit ingeger version of "$NOSTAIDVDF", which is used as the AppID for Steam artwork ("grids"), as well as for our shortcuts
+			NOSTAIDVDFHEX="$(generateShortcutVDFHexAppId "${NOSTAIDVDF}")"  # 4byte little-endian hexidecimal of above 32bit signed integer, which we write out to the binary VDF - ex: c1c25adc
+			NOSTAPPID="$(extractSteamId32 "${NOSTAIDVDF}")"  # unsigned 32bit ingeger version of "$NOSTAIDVDF", which is used as the AppID for Steam artwork ("grids"), as well as for our shortcuts
 
 			create_new_dir "${STEAM_SCRIPTS}"
 			cat <<-EOF > "${NOSTSHPATH}"
@@ -491,9 +511,15 @@ addNonSteamGame() {
 				cp "${SCPATH}" "${SCPATH//.vdf}_${PROGNAME}_backup.vdf" 2>/dev/null
 			fi
 
+			if [[ "${USE_STEAMAPPID_AS_NAME:-0}" == "1" ]]; then
+				SteamAppId=$(getSteamId "${NOSTAPPNAME}")
+				[[ -n "${SteamAppId}" ]] && NOSTAPPNAME="${SteamAppId}"
+			fi
+
 			addEntry
 
 			if [[ "${DOWNLOAD_STEAM_GRID}" == "1" ]] ; then
+				NOSTAPPNAME="${name_desktop}"
 				pw_start_progress_bar_block "${translations[Please wait. downloading covers for]} ${NOSTAPPNAME}"
 				addGrids
 				pw_stop_progress_bar