diff --git a/Makefile b/Makefile
index 89414fd7acd5f82e77fc2e0ede5da07b4219b290..12ed544121c0a6b74b96ad298cc26aa250140cb3 100644
--- a/Makefile
+++ b/Makefile
@@ -9,6 +9,9 @@ TEX_FLAGS = -file-line-error -interaction=nonstopmode -include-directory=.\src -
 SUB_TEX_FILES = $(wildcard img/*.tex) $(wildcard plt/*.tex)
 SUB_PDF_FILES = $(join $(dir $(SUB_TEX_FILES)),$(addprefix $(OUTDIR)/,$(notdir $(SUB_TEX_FILES:tex=pdf))))
 
+GARBAGE_PATTERNS = *.aux *.bbl *.bcf *.blg *.idx *.ind *.lof *.lot *.log *.xml *.toc
+GARBAGE = $(foreach D,. $(SUBDIRS), $(wildcard $(addprefix $(D)/$(OUTDIR)/,$(GARBAGE_PATTERNS))))
+
 
 export TEXINPUTS:=$(CURDIR)\src
 
@@ -26,34 +29,10 @@ bib: pdf $(OUTDIR)\$(NAME).bcf
 $(SUB_PDF_FILES): $(SUB_TEX_FILES)
 	$(LATEX) -output-directory=$(dir $@) $(TEX_FLAGS) $(subst build/,$(notdir $(@:pdf=tex)),$(dir $@))
 
+
 clean: tidy
-	if exist $(OUTDIR)\$(NAME).pdf del $(OUTDIR)\$(NAME).pdf
-	if exist $(OUTDIR) rmdir $(OUTDIR)
+	for %%a in ($(foreach D,. $(SUBDIRS), "$(D)\$(OUTDIR)")) do rd /s /q %%~a
 	if exist $(NAME).pdf del $(NAME).pdf
 
 tidy:
-	if exist $(OUTDIR)\$(NAME).aux del $(OUTDIR)\$(NAME).aux
-	if exist $(OUTDIR)\$(NAME).bbl del $(OUTDIR)\$(NAME).bbl
-	if exist $(OUTDIR)\$(NAME).bcf del $(OUTDIR)\$(NAME).bcf
-	if exist $(OUTDIR)\$(NAME).blg del $(OUTDIR)\$(NAME).blg
-	if exist $(OUTDIR)\$(NAME).idx del $(OUTDIR)\$(NAME).idx
-	if exist $(OUTDIR)\$(NAME).ind del $(OUTDIR)\$(NAME).ind
-	if exist $(OUTDIR)\$(NAME).lof del $(OUTDIR)\$(NAME).lof
-	if exist $(OUTDIR)\$(NAME).lot del $(OUTDIR)\$(NAME).lot
-	if exist $(OUTDIR)\$(NAME).out del $(OUTDIR)\$(NAME).out
-	if exist $(OUTDIR)\$(NAME).toc del $(OUTDIR)\$(NAME).toc
-	if exist $(OUTDIR)\$(NAME).acn del $(OUTDIR)\$(NAME).acn
-	if exist $(OUTDIR)\$(NAME).acr del $(OUTDIR)\$(NAME).acr
-	if exist $(OUTDIR)\$(NAME).alg del $(OUTDIR)\$(NAME).alg
-	if exist $(OUTDIR)\$(NAME).glg del $(OUTDIR)\$(NAME).glg
-	if exist $(OUTDIR)\$(NAME).glo del $(OUTDIR)\$(NAME).glo
-	if exist $(OUTDIR)\$(NAME).gls del $(OUTDIR)\$(NAME).gls
-	if exist $(OUTDIR)\$(NAME).ist del $(OUTDIR)\$(NAME).ist
-	if exist $(OUTDIR)\$(NAME).fls del $(OUTDIR)\$(NAME).fls
-	if exist $(OUTDIR)\$(NAME).log del $(OUTDIR)\$(NAME).log
-	if exist $(OUTDIR)\$(NAME).nav del $(OUTDIR)\$(NAME).nav
-	if exist $(OUTDIR)\$(NAME).snm del $(OUTDIR)\$(NAME).snm
-	if exist $(OUTDIR)\$(NAME).fdb_latexmk del $(OUTDIR)\$(NAME).fdb_latexmk
-	if exist $(OUTDIR)\$(NAME).synctex.gz del $(OUTDIR)\$(NAME).synctex.gz
-	if exist $(OUTDIR)\$(NAME).run.xml del $(OUTDIR)\$(NAME).run.xml
-	if exist $(OUTDIR)\$(NAME).bc del $(OUTDIR)\$(NAME).bc
\ No newline at end of file
+	if exist $(or $(word 1, $(subst /,\,$(GARBAGE))), false) del /q $(subst /,\,$(GARBAGE))
\ No newline at end of file