diff --git a/.gitattributes b/.gitattributes
index e6d31d6aa31fc..fe0c4b47e0994 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -8,6 +8,7 @@
# These are binary so should never be modified by git.
*.a binary
+*.ico binary
*.png binary
*.jpg binary
*.dxf binary
diff --git a/logo/vector-logo-2.ico b/logo/vector-logo-2.ico
new file mode 100644
index 0000000000000..3613ef21f6651
Binary files /dev/null and b/logo/vector-logo-2.ico differ
diff --git a/ports/windows/Makefile b/ports/windows/Makefile
index 47ce664d7bde6..2215ce38d1e98 100644
--- a/ports/windows/Makefile
+++ b/ports/windows/Makefile
@@ -102,3 +102,9 @@ test: $(BUILD)/$(PROG) $(TOP)/tests/run-tests.py
test_full: test
$(eval DIRNAME=ports/$(notdir $(CURDIR)))
cd $(TOP)/tests && MICROPY_MICROPYTHON=../$(DIRNAME)/$(BUILD)/$(PROG) $(PYTHON) ./run-tests.py --via-mpy $(RUN_TESTS_MPY_CROSS_FLAGS) $(RUN_TESTS_SKIP) -d basics float micropython
+
+$(BUILD)/$(PROG): $(BUILD)/micropython.res
+
+$(BUILD)/%.res: %.rc
+ $(ECHO) "WINDRES $<"
+ $(Q)$(WINDRES) $< -O coff -o $@
diff --git a/ports/windows/micropython.rc b/ports/windows/micropython.rc
new file mode 100644
index 0000000000000..8d92bb0d81ea2
--- /dev/null
+++ b/ports/windows/micropython.rc
@@ -0,0 +1 @@
+app ICON "../../logo/vector-logo-2.ico"
diff --git a/ports/windows/micropython.vcxproj b/ports/windows/micropython.vcxproj
index de04975cd498d..d5affd9e23ba4 100644
--- a/ports/windows/micropython.vcxproj
+++ b/ports/windows/micropython.vcxproj
@@ -103,6 +103,9 @@
+
+
+
diff --git a/py/mkenv.mk b/py/mkenv.mk
index d3dddcc32d9e8..b52dafbc9d0f6 100644
--- a/py/mkenv.mk
+++ b/py/mkenv.mk
@@ -54,6 +54,7 @@ OBJCOPY = $(CROSS_COMPILE)objcopy
SIZE = $(CROSS_COMPILE)size
STRIP = $(CROSS_COMPILE)strip
AR = $(CROSS_COMPILE)ar
+WINDRES = $(CROSS_COMPILE)windres
MAKE_MANIFEST = $(PYTHON) $(TOP)/tools/makemanifest.py
MAKE_FROZEN = $(PYTHON) $(TOP)/tools/make-frozen.py