diff --git a/README.md b/README.md
index 3fc96563507811075a466ff6d8115b215cae17a8..b39b8844eb26fd03efb35e09f4488980095fcebe 100644
--- a/README.md
+++ b/README.md
@@ -44,6 +44,8 @@ To compile with debug capabilities, do
 `scons debug=1`
 To compile the standalone codes the are part of podd, do
 `scons standalone=1`
+To run cppcheck (if installed) on the Hall C src diretory, do
+`scons cppcheck=1`
 
 Running
 -------
diff --git a/SConstruct.py b/SConstruct.py
index 069202f22a0467d5dbb9af63f50eba13fe01cee2..69474cfe7e8f00f73f0adc8c353cc186e284ef53 100644
--- a/SConstruct.py
+++ b/SConstruct.py
@@ -105,6 +105,37 @@ except OSError:
 bld = Builder(action=rootcint)
 baseenv.Append(BUILDERS = {'RootCint': bld})
 
+######## cppcheck ###########################
+
+def which(program):
+	import os
+	def is_exe(fpath):
+		return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+	
+	fpath, fname = os.path.split(program)
+	if fpath:
+		if is_exe(program):
+			return program
+	else:
+		for path in os.environ["PATH"].split(os.pathsep):
+			path = path.strip('"')
+			exe_file = os.path.join(path, program)
+			if is_exe(exe_file):
+				return exe_file
+	return None
+
+proceed = "1" or "y" or "yes" or "Yes" or "Y"
+if baseenv.subst('$CPPCHECK')==proceed:
+	is_cppcheck = which('cppcheck')
+	print "Path to cppcheck is %s\n" % is_cppcheck
+
+	if(is_cppcheck == None):
+		print('!!! cppcheck not found on this system.  Check if cppcheck is installed and in your PATH.')
+		Exit(1)
+	else:
+		cppcheck_command = baseenv.Command('cppcheck_report.txt',[],"cppcheck --quiet --enable=all src/ 2> $TARGET")
+		baseenv.AlwaysBuild(cppcheck_command)
+
 ####### Start of main SConstruct ############
 
 hallclib = 'HallC'
diff --git a/darwin64.py b/darwin64.py
index 864f8b4e49df062eac09f77999f4b8c74851217e..08c690b351ecb9418f0ef4f5d4381ec8d89c9ccb 100644
--- a/darwin64.py
+++ b/darwin64.py
@@ -5,6 +5,8 @@ def config(env,args):
 
 	debug = args.get('debug',0)
 	standalone = args.get('standalone',0)
+	cppcheck = args.get('cppcheck',0)
+
 	if int(debug):
 		env.Append(CXXFLAGS = '-g -O0')
 	else:	
@@ -14,6 +16,9 @@ def config(env,args):
 	if int(standalone):
 		env.Append(STANDALONE= '1')
 
+	if int(cppcheck):
+		env.Append(CPPCHECK= '1')
+
 	#env.Append(CXXFLAGS = '-Wall -Woverloaded-virtual -pthread -rdynamic')
 	env.Append(CXXFLAGS = '-Wall -Woverloaded-virtual -pthread')
 	env.Append(CPPDEFINES = '-DMACVERS')
diff --git a/linux32.py b/linux32.py
index 4db891cdce1eca54f65684aea17c48ae2202b105..6ba4b174d36925800b5c8ecae27231c58c692f1f 100644
--- a/linux32.py
+++ b/linux32.py
@@ -5,6 +5,8 @@ def config(env,args):
 
 	debug = args.get('debug',0)
 	standalone = args.get('standalone',0)
+	cppcheck = args.get('cppcheck',0)
+
 	if int(debug):
 		env.Append(CXXFLAGS = '-g -O0')
 	else:	
@@ -14,6 +16,9 @@ def config(env,args):
 	if int(standalone):
 		env.Append(STANDALONE= '1')
 
+	if int(cppcheck):
+		env.Append(CPPCHECK= '1')
+
 	env.Append(CXXFLAGS = '-m32 -Wall -Woverloaded-virtual')
 	env.Append(CPPDEFINES = '-DLINUXVERS')
 
diff --git a/linux64.py b/linux64.py
index d45f862bac15d176558d40901ae03d0882b3efb8..ae012d6de736a944c47d8440cf807f57ccf4b68e 100644
--- a/linux64.py
+++ b/linux64.py
@@ -5,6 +5,8 @@ def config(env,args):
 
 	debug = args.get('debug',0)
 	standalone = args.get('standalone',0)
+	cppcheck = args.get('cppcheck',0)
+	
 	if int(debug):
 		env.Append(CXXFLAGS = '-g -O0')
 	else:	
@@ -14,6 +16,9 @@ def config(env,args):
 	if int(standalone):
 		env.Append(STANDALONE= '1')
 
+	if int(cppcheck):
+		env.Append(CPPCHECK= '1')
+	
 	env.Append(CXXFLAGS = '-Wall -Woverloaded-virtual')
 	env.Append(CPPDEFINES = '-DLINUXVERS')