diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro
index 6b85bd6a3c2865fbde918e82a3188f402bac5799..31e8a61d75ac1728f053fd413e60cf14c6f5287e 100644
--- a/qgroundcontrol.pro
+++ b/qgroundcontrol.pro
@@ -116,6 +116,72 @@ WindowsBuild {
 	RC_FILE = $$BASEDIR/qgroundcontrol.rc
 }
 
+#
+# Warnings cleanup. Plan of attack is to turn off all existing warnings and turn on warnings as errors.
+# Then we will clean up the warnings one type at a time, removing the override for that specific warning
+# from the lists below. Eventually we will be left with no overlooked warnings and all future warnings
+# generating an error and breaking the build.
+#
+# NEW WARNINGS SHOULD NOT BE ADDED TO THIS LIST. IF YOU GET AN ERROR, FIX IT BEFORE COMMITING.
+#
+
+MacBuild | LinuxBuild {
+	QMAKE_CXXFLAGS_WARN_ON += \
+        -Wall \
+        -Werror \
+        -Wno-unused-parameter \
+        -Wno-reorder \
+        -Wno-unused-variable \
+        -Wno-enum-compare \
+        -Wno-narrowing \
+        -Wno-type-limits \
+        -Wno-sign-compare \
+        -Wno-uninitialized \
+        -Wno-switch \
+        -Wno-unused-function
+}
+
+LinuxBuild {
+	QMAKE_CXXFLAGS_WARN_ON += \
+        -Wno-unused-but-set-variable \
+        -Wno-cpp
+}
+
+MacBuild {
+	QMAKE_CXXFLAGS_WARN_ON += \
+        -Wno-tautological-compare \
+        -Wno-null-conversion \
+        -Wno-overloaded-virtual \
+        -Wno-unused-private-field
+}
+
+WindowsBuild {
+	QMAKE_CXXFLAGS_WARN_ON += \
+        /W4 \
+        /WX \
+        /wd4005 \ # macro redefinition
+        /wd4018 \ # signed/unsigned mismatch
+        /wd4063 \ # case not valid for switch enum
+        /wd4100 \ # unrefernced formal parameter
+        /wd4101 \ # unreference local variable
+        /wd4127 \ # conditional expression constant
+        /wd4146 \ # unary minus operator applied to unsigned type
+        /wd4189 \ # local variable initialized but not used
+        /wd4201 \ # non standard extension: nameless struct/union
+        /wd4245 \ # signed/unsigned mismtach
+        /wd4290 \ # function declared using exception specification, but not supported
+        /wd4305 \ # truncation from double to float
+        /wd4309 \ # truncation of constant value
+        /wd4389 \ # == signed/unsigned mismatch
+        /wd4505 \ # unreferenced local function
+        /wd4512 \ # assignment operation could not be generated
+        /wd4700 \ # uninitialized local variable used
+        /wd4701 \ # potentially uninitialized local variable
+        /wd4702 \ # unreachable code
+        /wd4996   # deprecated function
+
+}
+
 #
 # Build flavor specific settings
 #