LN world indexLNWI
SG77.47▲0.11GI74.38EE74.37▼0.24TW73.88CZ73.75▼0.07GE73.44▼0.09JE73.38IE73.24▼0.11IM73.23▼0.05MY73.21PT73.04▼0.06NZ73.02▼0.04AD72.89▼0.08LT72.88▼0.08BG72.85FI72.74▼0.09HK72.60▼0.26PL72.48▼0.09HU72.48▼0.11GB72.40▼0.12AE72.40▲0.06GG72.30RO72.28▼0.11CY71.93CR71.89▼0.10UY71.87▲0.13SE71.81▼0.05LU71.70LV71.58▼0.08GG71.51▼0.05HR71.28▼0.10ES71.25▲0.20AU71.11▼0.06MU71.09▲0.13CL70.97▼0.13LI70.88▼0.42NL70.82▲0.12MT70.80▼0.05FR70.80▼0.10MC70.71▲0.08CA70.70▼0.07SJ70.70▼0.06DE70.66▼0.14DK70.62PA70.51▼0.15SM70.43▼0.08BM70.42▼0.06AT70.40▼0.06SK70.38▼0.09MK70.35▼0.12SI70.33▼0.09CH70.25▲0.31KY70.23▼0.06QA70.13▼0.11BH70.02▼0.11MO69.89▼0.07IT69.88▼0.61GG69.87▼0.40ME69.84▼0.11VG69.83▼0.10IS69.81▼0.08GR69.65▼0.12BE69.54▼0.05SA69.31▼0.13BN69.21▼0.12RS69.20▲0.08JP69.00▼0.19AM68.82▼0.11AL68.79▼0.13NO68.74▲0.30US68.56▼0.18JO68.51▼0.12SH68.49▲0.08BL68.29▲0.05TC68.23▼0.14GD68.15▲0.81KR68.07▼0.23TH68.02▼0.13AG67.96▲0.02PR67.93KN67.92OM67.88▼0.13BB67.85▲0.33MD67.69▲0.37PY67.45▼0.11BQ67.34▼0.10BA67.13▼0.27PE67.09BS66.98▲0.06AI66.86KW66.72▼0.13FO66.71▲0.10BQ66.70▼0.44XK66.69▼0.13MA66.42▲0.09CW66.27▼0.11BR66.21▼0.15DO66.19▼0.17MX66.14AR66.11▼0.33BQ66.05▼0.44KZ65.86▼0.57SV65.86▼0.17AW65.66▼0.11CV65.64▼0.35UZ65.40▼0.15SC65.29MS64.98▼0.09BW64.82▼2.53FJ64.80▲0.21NA64.74▲0.09ID64.72IL64.39▼0.07PF64.38▲0.03GT64.37▼0.14JM64.26▲0.28VC64.00MN63.84▼0.13KG63.79▼0.15AZ63.71▼0.35BZ63.67▲0.03PM63.65FK63.61▼0.09CK63.59▼0.08PH63.58DM63.54▼0.11TT63.39▼0.13TR63.33▼0.19VN63.30▼0.16MF63.30GL63.22▲0.07NU63.13▼0.11UA63.12▼0.14PN63.10▼0.11CO63.01▲0.41EC62.94▼0.12LC62.79▼0.11ZA62.67▲0.06VU62.55▲0.04PW62.53▼0.13HN62.30▼0.15WF62.28VI62.27▼0.14BO62.21▼0.19MH62.03▼0.36IN61.94EG61.67▼0.14GH61.58RW61.46▼0.11SX61.40▼0.12NC61.33▼0.10KH61.23▼0.15LK60.95▲0.21CN60.95▼0.16ZM60.80▼0.14WS60.73▼0.10NI60.72NP60.51▼0.17KE60.29▲0.07SN60.24▼0.01MV60.16▼0.12FM60.14▼0.21TN60.02▼0.72GY59.97▲0.06MW59.93▼0.15TZ59.78▼0.15TL59.74▼0.06BT59.43▼0.14TO59.36▲0.07GA59.33▼0.20TJ59.18▲0.03TK59.14▼0.12SZ58.89ST58.75▼0.17LA58.27▲0.24CI57.71BJ57.68MG57.66▼0.16SR57.60▼0.15DZ57.21▲0.15GM57.12▲0.12LB56.87▲0.16LS56.83NR56.69▼0.35UG56.65▼0.15TG56.12BF55.83▼0.05TV55.81▼0.15ZW55.68▼0.14BD55.66▼0.42RU55.57▼0.10BY55.03▼0.19PS54.83▼0.19KI54.81▼0.35DJ54.63▼0.03MZ54.32▼0.18IQ54.24▼0.06KM53.57▼0.18LR53.48▼0.13AO53.43▼0.24PK53.20TM53.20▲0.20NG53.13▼0.16LY52.71▲0.12MR52.57▼0.17SB52.53▼0.14CM52.40▼0.18GW52.23▼0.06ET51.89NE51.82▼0.05SL51.81▲0.23CG51.66▼0.20IR50.64▼0.34GQ50.13▼0.21PG49.97▼0.14CU49.91▼0.21GN49.84▼0.18VE49.21▼0.27ML49.14▼0.19HT48.98▼0.18MM48.72▼0.19BI48.31▼0.19CD48.24SD46.12▼0.22SO45.59▼0.22YE44.91▼0.23AF44.90SY44.86▼0.22TD44.06CF43.82▼0.08ER41.78▼0.22SS41.50▼0.15
SG77.47▲0.11GI74.38EE74.37▼0.24TW73.88CZ73.75▼0.07GE73.44▼0.09JE73.38IE73.24▼0.11IM73.23▼0.05MY73.21PT73.04▼0.06NZ73.02▼0.04AD72.89▼0.08LT72.88▼0.08BG72.85FI72.74▼0.09HK72.60▼0.26PL72.48▼0.09HU72.48▼0.11GB72.40▼0.12AE72.40▲0.06GG72.30RO72.28▼0.11CY71.93CR71.89▼0.10UY71.87▲0.13SE71.81▼0.05LU71.70LV71.58▼0.08GG71.51▼0.05HR71.28▼0.10ES71.25▲0.20AU71.11▼0.06MU71.09▲0.13CL70.97▼0.13LI70.88▼0.42NL70.82▲0.12MT70.80▼0.05FR70.80▼0.10MC70.71▲0.08CA70.70▼0.07SJ70.70▼0.06DE70.66▼0.14DK70.62PA70.51▼0.15SM70.43▼0.08BM70.42▼0.06AT70.40▼0.06SK70.38▼0.09MK70.35▼0.12SI70.33▼0.09CH70.25▲0.31KY70.23▼0.06QA70.13▼0.11BH70.02▼0.11MO69.89▼0.07IT69.88▼0.61GG69.87▼0.40ME69.84▼0.11VG69.83▼0.10IS69.81▼0.08GR69.65▼0.12BE69.54▼0.05SA69.31▼0.13BN69.21▼0.12RS69.20▲0.08JP69.00▼0.19AM68.82▼0.11AL68.79▼0.13NO68.74▲0.30US68.56▼0.18JO68.51▼0.12SH68.49▲0.08BL68.29▲0.05TC68.23▼0.14GD68.15▲0.81KR68.07▼0.23TH68.02▼0.13AG67.96▲0.02PR67.93KN67.92OM67.88▼0.13BB67.85▲0.33MD67.69▲0.37PY67.45▼0.11BQ67.34▼0.10BA67.13▼0.27PE67.09BS66.98▲0.06AI66.86KW66.72▼0.13FO66.71▲0.10BQ66.70▼0.44XK66.69▼0.13MA66.42▲0.09CW66.27▼0.11BR66.21▼0.15DO66.19▼0.17MX66.14AR66.11▼0.33BQ66.05▼0.44KZ65.86▼0.57SV65.86▼0.17AW65.66▼0.11CV65.64▼0.35UZ65.40▼0.15SC65.29MS64.98▼0.09BW64.82▼2.53FJ64.80▲0.21NA64.74▲0.09ID64.72IL64.39▼0.07PF64.38▲0.03GT64.37▼0.14JM64.26▲0.28VC64.00MN63.84▼0.13KG63.79▼0.15AZ63.71▼0.35BZ63.67▲0.03PM63.65FK63.61▼0.09CK63.59▼0.08PH63.58DM63.54▼0.11TT63.39▼0.13TR63.33▼0.19VN63.30▼0.16MF63.30GL63.22▲0.07NU63.13▼0.11UA63.12▼0.14PN63.10▼0.11CO63.01▲0.41EC62.94▼0.12LC62.79▼0.11ZA62.67▲0.06VU62.55▲0.04PW62.53▼0.13HN62.30▼0.15WF62.28VI62.27▼0.14BO62.21▼0.19MH62.03▼0.36IN61.94EG61.67▼0.14GH61.58RW61.46▼0.11SX61.40▼0.12NC61.33▼0.10KH61.23▼0.15LK60.95▲0.21CN60.95▼0.16ZM60.80▼0.14WS60.73▼0.10NI60.72NP60.51▼0.17KE60.29▲0.07SN60.24▼0.01MV60.16▼0.12FM60.14▼0.21TN60.02▼0.72GY59.97▲0.06MW59.93▼0.15TZ59.78▼0.15TL59.74▼0.06BT59.43▼0.14TO59.36▲0.07GA59.33▼0.20TJ59.18▲0.03TK59.14▼0.12SZ58.89ST58.75▼0.17LA58.27▲0.24CI57.71BJ57.68MG57.66▼0.16SR57.60▼0.15DZ57.21▲0.15GM57.12▲0.12LB56.87▲0.16LS56.83NR56.69▼0.35UG56.65▼0.15TG56.12BF55.83▼0.05TV55.81▼0.15ZW55.68▼0.14BD55.66▼0.42RU55.57▼0.10BY55.03▼0.19PS54.83▼0.19KI54.81▼0.35DJ54.63▼0.03MZ54.32▼0.18IQ54.24▼0.06KM53.57▼0.18LR53.48▼0.13AO53.43▼0.24PK53.20TM53.20▲0.20NG53.13▼0.16LY52.71▲0.12MR52.57▼0.17SB52.53▼0.14CM52.40▼0.18GW52.23▼0.06ET51.89NE51.82▼0.05SL51.81▲0.23CG51.66▼0.20IR50.64▼0.34GQ50.13▼0.21PG49.97▼0.14CU49.91▼0.21GN49.84▼0.18VE49.21▼0.27ML49.14▼0.19HT48.98▼0.18MM48.72▼0.19BI48.31▼0.19CD48.24SD46.12▼0.22SO45.59▼0.22YE44.91▼0.23AF44.90SY44.86▼0.22TD44.06CF43.82▼0.08ER41.78▼0.22SS41.50▼0.15
Lucky NomadsLucky Nomads
ProductMethodologyAdvisoryPricing
Sample report
Cockpit accessGet GeoCompassFree diagnostic

Preparing this country profile

This may take a few seconds the first time. That is normal.

The page is being put together and will appear in a moment. It loads instantly the next time.

GeoCompass

Find the country where youkeep more and live better.

Built by

Lucky NomadsLucky Nomads

Founded by Lucky Maillard

Lucky Nomads on LinkedIn

Navigation

  • GeoCompass SignalFree
  • Product
  • Methodology
  • Sample Report
  • Cockpit access
  • Pricing
  • Advisory
  • Become a partner
  • FAQ
  • About
  • Contact

Resources

  • Briefings
  • Insights
  • Rankings
  • Countries
  • Cities
  • Visa checker
  • Tax residency calculator
  • Maps
  • Surprise me

Contact

  • contact@luckynomads.io
  • Book a free orientation call

Newsletter

Stay in the loop

Our latest thinking on jurisdictions, tax and lifestyle, in a short weekly email. No spam, unsubscribe anytime.

Legal

  • Terms of Service
  • Privacy Policy
  • Cookie Policy
  • Legal

© 2026 Lucky Nomads. All rights reserved.

Lucky Nomads provides structured strategic decision frameworks.
GeoCompass does not constitute legal, tax, or financial advice.
All decisions remain the sole responsibility of the user.

  1. Country profiles
  2. /
  3. Malaysia
  4. /
  5. Cities
  6. /
  7. Sandakan

CityCompass

Sandakan, Malaysia

  • 439k people
  • Sabah

Best time to be here: March to May. Every month below carries its climate normals and a comfort score you can tune to your own tolerances.

Comfortable months
0 of 12
Comfort 7 or above
Comfort peak
6.6
In April
Year range
25 to 29 °C
Coldest nights to warmest days
Sunshine a year
2,220 h
Moderate sunshine
Kuala LumpurJohor BahruIpohMalaccaKota BharuKuantanKota Kuala MudaKota KinabaluKuala TerengganuKuchingTawauMiriSandakanKuala LumpurIpohMalaccaKota BharuKuchingTawauMiri

Dots are the other cities we cover here. Click one to switch.

Climate and comfort, month by month

Your comfort zone
20 °C25 °C30 °CJFMAMJJASOND
ComfortableMixedHarshAverage temperature, day-to-night range shaded
Jan5.327 °C
Feb5.528 °C
Mar6.028 °C
Apr6.629 °C
May6.529 °C
Jun6.029 °C
Jul5.828 °C
Aug5.929 °C
Sep5.629 °C
Oct5.528 °C
Nov5.428 °C
Dec5.328 °C
January27 °C / 26 °C5.3

Days 27 °C, nights 26 °C

Feels like 32 °C in the afternoons

147 h sunshine · 11.7 h daylight

380 mm rain · 87% humidity

  • Hot month, daily highs around 27.4 C
  • Very rainy, about 380 mm
February28 °C / 25 °C5.5

Days 28 °C, nights 25 °C

Feels like 32 °C in the afternoons

156 h sunshine · 11.8 h daylight

248 mm rain · 85% humidity

  • Hot month, daily highs around 27.5 C
  • Very rainy, about 248 mm
March28 °C / 26 °C6.0

Days 28 °C, nights 26 °C

Feels like 33 °C in the afternoons

199 h sunshine · 12.0 h daylight

208 mm rain · 84% humidity

  • Hot month, daily highs around 28 C
  • Very rainy, about 208 mm
April29 °C / 27 °C6.6

Days 29 °C, nights 27 °C

Feels like 35 °C in the afternoons

213 h sunshine · 12.1 h daylight

148 mm rain · 83% humidity

  • Hot month, daily highs around 28.8 C
May29 °C / 27 °C6.5

Days 29 °C, nights 27 °C

Feels like 35 °C in the afternoons

220 h sunshine · 12.3 h daylight

156 mm rain · 84% humidity

  • Hot month, daily highs around 28.9 C
June29 °C / 26 °C6.0

Days 29 °C, nights 26 °C

Feels like 34 °C in the afternoons

196 h sunshine · 12.3 h daylight

194 mm rain · 85% humidity

  • Hot month, daily highs around 28.5 C
  • Very rainy, about 194 mm
July28 °C / 26 °C5.8

Days 28 °C, nights 26 °C

Feels like 34 °C in the afternoons

200 h sunshine · 12.3 h daylight

216 mm rain · 85% humidity

  • Hot month, daily highs around 28.3 C
  • Very rainy, about 216 mm
August29 °C / 26 °C5.9

Days 29 °C, nights 26 °C

Feels like 34 °C in the afternoons

204 h sunshine · 12.2 h daylight

210 mm rain · 85% humidity

  • Hot month, daily highs around 28.5 C
  • Very rainy, about 210 mm
September29 °C / 26 °C5.6

Days 29 °C, nights 26 °C

Feels like 34 °C in the afternoons

184 h sunshine · 12.0 h daylight

230 mm rain · 84% humidity

  • Hot month, daily highs around 28.5 C
  • Very rainy, about 230 mm
October28 °C / 26 °C5.5

Days 28 °C, nights 26 °C

Feels like 34 °C in the afternoons

177 h sunshine · 11.9 h daylight

262 mm rain · 85% humidity

  • Hot month, daily highs around 28.3 C
  • Very rainy, about 262 mm
November28 °C / 26 °C5.4

Days 28 °C, nights 26 °C

Feels like 33 °C in the afternoons

166 h sunshine · 11.7 h daylight

273 mm rain · 86% humidity

  • Hot month, daily highs around 28.1 C
  • Very rainy, about 273 mm
December28 °C / 26 °C5.3

Days 28 °C, nights 26 °C

Feels like 33 °C in the afternoons

160 h sunshine · 11.7 h daylight

359 mm rain · 87% humidity

  • Hot month, daily highs around 27.8 C
  • Very rainy, about 359 mm

The country behind the city

Living in Sandakan means living under Malaysia's tax and legal system. The essentials, from our country research:

Personal tax basisRemittance basisForeign income taxed if brought in
Nomad visaYes, up to 12 months
Cost floor, single$1,116/mo
LanguagesMalay, English, Mandarin, Indonesian
Safety8.25 / 10
Healthcare7.94 / 10
Internet8.53 / 10
Banking ease7.70 / 10
ClimateShield 20507.30 / 10

Would Malaysia actually work for your taxes?

It runs regimes like Foreign-Source Income Exemption (Resident Individual), and whether they fit depends on your income, assets and citizenship, not on averages.

Run your GeoCompass analysisRead the full Malaysia profile

Other cities in Malaysia

  • Kuala LumpurCapital5.0

    Best February, June and July

    2,018 h of sun a year
  • Johor Bahru6.9

    Best December to February

    1,830 h of sun a year
  • Kampung Baru Subang5.4

    Best February, June and July

    2,018 h of sun a year
  • Petaling Jaya5.0

    Best February, June and July

    2,018 h of sun a year
  • Ipoh5.2

    Best February, June and July

    2,101 h of sun a year
  • Shah Alam5.4

    Best February, June and July

    2,018 h of sun a year
  • Bukit Rahman Putra5.4

    Best February, June and July

    2,018 h of sun a year
  • Pelentong6.9

    Best December to February

    1,830 h of sun a year
  • Malacca6.2

    Best January to March

    1,994 h of sun a year
See all 33 cities in Malaysia
How the comfort score works (v1)

Each month scores 0 to 10 from four weighted components: temperature (35%), sunshine (25%), humidity (20%) and rain (20%), with an extra penalty when heat and humidity combine. Personal tolerances reshape the score: your heat limit compares to how afternoons feel (heat index), your cold limit to typical nights. Data: NASA POWER climatology 2001-2020 with elevation corrections, daylight computed from latitude.

City data: GeoNames (CC BY 4.0) · Climate normals: NASA POWER (2001-2020) · Live weather: MET Norway (CC BY 4.0)

  1. Country profiles
  2. /
  3. Malaysia
  4. /
  5. Cities
  6. /
  7. Sandakan

CityCompass

Sandakan, Malaysia

  • 439k people
  • Sabah

Best time to be here: March to May. Every month below carries its climate normals and a comfort score you can tune to your own tolerances.

Comfortable months
0 of 12
Comfort 7 or above
Comfort peak
6.6
In April
Year range
25 to 29 °C
Coldest nights to warmest days
Sunshine a year
2,220 h
Moderate sunshine
Kuala LumpurJohor BahruIpohMalaccaKota BharuKuantanKota Kuala MudaKota KinabaluKuala TerengganuKuchingTawauMiriSandakanKuala LumpurIpohMalaccaKota BharuKuchingTawauMiri

Dots are the other cities we cover here. Click one to switch.

Climate and comfort, month by month

Your comfort zone
20 °C25 °C30 °CJFMAMJJASOND
ComfortableMixedHarshAverage temperature, day-to-night range shaded
Jan5.327 °C
Feb5.528 °C
Mar6.028 °C
Apr6.629 °C
May6.529 °C
Jun6.029 °C
Jul5.828 °C
Aug5.929 °C
Sep5.629 °C
Oct5.528 °C
Nov5.428 °C
Dec5.328 °C
January27 °C / 26 °C5.3

Days 27 °C, nights 26 °C

Feels like 32 °C in the afternoons

147 h sunshine · 11.7 h daylight

380 mm rain · 87% humidity

  • Hot month, daily highs around 27.4 C
  • Very rainy, about 380 mm
February28 °C / 25 °C5.5

Days 28 °C, nights 25 °C

Feels like 32 °C in the afternoons

156 h sunshine · 11.8 h daylight

248 mm rain · 85% humidity

  • Hot month, daily highs around 27.5 C
  • Very rainy, about 248 mm
March28 °C / 26 °C6.0

Days 28 °C, nights 26 °C

Feels like 33 °C in the afternoons

199 h sunshine · 12.0 h daylight

208 mm rain · 84% humidity

  • Hot month, daily highs around 28 C
  • Very rainy, about 208 mm
April29 °C / 27 °C6.6

Days 29 °C, nights 27 °C

Feels like 35 °C in the afternoons

213 h sunshine · 12.1 h daylight

148 mm rain · 83% humidity

  • Hot month, daily highs around 28.8 C
May29 °C / 27 °C6.5

Days 29 °C, nights 27 °C

Feels like 35 °C in the afternoons

220 h sunshine · 12.3 h daylight

156 mm rain · 84% humidity

  • Hot month, daily highs around 28.9 C
June29 °C / 26 °C6.0

Days 29 °C, nights 26 °C

Feels like 34 °C in the afternoons

196 h sunshine · 12.3 h daylight

194 mm rain · 85% humidity

  • Hot month, daily highs around 28.5 C
  • Very rainy, about 194 mm
July28 °C / 26 °C5.8

Days 28 °C, nights 26 °C

Feels like 34 °C in the afternoons

200 h sunshine · 12.3 h daylight

216 mm rain · 85% humidity

  • Hot month, daily highs around 28.3 C
  • Very rainy, about 216 mm
August29 °C / 26 °C5.9

Days 29 °C, nights 26 °C

Feels like 34 °C in the afternoons

204 h sunshine · 12.2 h daylight

210 mm rain · 85% humidity

  • Hot month, daily highs around 28.5 C
  • Very rainy, about 210 mm
September29 °C / 26 °C5.6

Days 29 °C, nights 26 °C

Feels like 34 °C in the afternoons

184 h sunshine · 12.0 h daylight

230 mm rain · 84% humidity

  • Hot month, daily highs around 28.5 C
  • Very rainy, about 230 mm
October28 °C / 26 °C5.5

Days 28 °C, nights 26 °C

Feels like 34 °C in the afternoons

177 h sunshine · 11.9 h daylight

262 mm rain · 85% humidity

  • Hot month, daily highs around 28.3 C
  • Very rainy, about 262 mm
November28 °C / 26 °C5.4

Days 28 °C, nights 26 °C

Feels like 33 °C in the afternoons

166 h sunshine · 11.7 h daylight

273 mm rain · 86% humidity

  • Hot month, daily highs around 28.1 C
  • Very rainy, about 273 mm
December28 °C / 26 °C5.3

Days 28 °C, nights 26 °C

Feels like 33 °C in the afternoons

160 h sunshine · 11.7 h daylight

359 mm rain · 87% humidity

  • Hot month, daily highs around 27.8 C
  • Very rainy, about 359 mm

The country behind the city

Living in Sandakan means living under Malaysia's tax and legal system. The essentials, from our country research:

Personal tax basisRemittance basisForeign income taxed if brought in
Nomad visaYes, up to 12 months
Cost floor, single$1,116/mo
LanguagesMalay, English, Mandarin, Indonesian
Safety8.25 / 10
Healthcare7.94 / 10
Internet8.53 / 10
Banking ease7.70 / 10
ClimateShield 20507.30 / 10

Would Malaysia actually work for your taxes?

It runs regimes like Foreign-Source Income Exemption (Resident Individual), and whether they fit depends on your income, assets and citizenship, not on averages.

Run your GeoCompass analysisRead the full Malaysia profile

Other cities in Malaysia

  • Kuala LumpurCapital5.0

    Best February, June and July

    2,018 h of sun a year
  • Johor Bahru6.9

    Best December to February

    1,830 h of sun a year
  • Kampung Baru Subang5.4

    Best February, June and July

    2,018 h of sun a year
  • Petaling Jaya5.0

    Best February, June and July

    2,018 h of sun a year
  • Ipoh5.2

    Best February, June and July

    2,101 h of sun a year
  • Shah Alam5.4

    Best February, June and July

    2,018 h of sun a year
  • Bukit Rahman Putra5.4

    Best February, June and July

    2,018 h of sun a year
  • Pelentong6.9

    Best December to February

    1,830 h of sun a year
  • Malacca6.2

    Best January to March

    1,994 h of sun a year
See all 33 cities in Malaysia
How the comfort score works (v1)

Each month scores 0 to 10 from four weighted components: temperature (35%), sunshine (25%), humidity (20%) and rain (20%), with an extra penalty when heat and humidity combine. Personal tolerances reshape the score: your heat limit compares to how afternoons feel (heat index), your cold limit to typical nights. Data: NASA POWER climatology 2001-2020 with elevation corrections, daylight computed from latitude.

City data: GeoNames (CC BY 4.0) · Climate normals: NASA POWER (2001-2020) · Live weather: MET Norway (CC BY 4.0)