diff --git a/CMSIS/CoreValidation/Tests/build.py b/CMSIS/CoreValidation/Tests/build.py
index 85458a0..4f5b46e 100644
--- a/CMSIS/CoreValidation/Tests/build.py
+++ b/CMSIS/CoreValidation/Tests/build.py
@@ -178,12 +178,12 @@
 
 def execute(steps, args):
   for step in steps:
-    print step['name']
+    print(step['name'])
     if step['build'] and not args.execute_only:
       for b in step['build']:
         b.run()
     else:
-      print "Skipping build"
+      print("Skipping build")
       # step['build'].skip()
       
     if step['test'] and not args.build_only:
@@ -191,21 +191,21 @@
       step['result'] = TestResult(step['test'].getOutput())
       step['result'].saveXml("result_{0}_{1}.xml".format(step['prefix'], datetime.now().strftime("%Y%m%d%H%M%S")))
     else:
-      print "Skipping test"
+      print("Skipping test")
       step['test'].skip()
       
 def printSummary(steps):
-  print ""
-  print "Test Summary"
-  print "============"
-  print
-  print "Test run                       Total Exec  Pass  Fail  "
-  print "-------------------------------------------------------"
+  print("")
+  print("Test Summary")
+  print("============")
+  print()
+  print("Test run                       Total Exec  Pass  Fail  ")
+  print("-------------------------------------------------------")
   for step in steps:
     try:
-      print "{0:30} {1:>4}  {2:>4}  {3:>4}  {4:>4}".format(step['name'], *step['result'].getSummary())
+      print("{0:30} {1:>4}  {2:>4}  {3:>4}  {4:>4}".format(step['name'], *step['result'].getSummary()))
     except:
-      print "{0:30} ------ NO RESULTS ------".format(step['name'])
+      print("{0:30} ------ NO RESULTS ------".format(step['name']))
 
 def main(argv):
   parser = ArgumentParser()
@@ -221,7 +221,7 @@
     for dev in args.devices:
       model = FVP_MODELS[dev]
       cmd = [ model['cmd'], '-l', '-o', model['args']['config'] ]
-      print " ".join(cmd)
+      print(" ".join(cmd))
       call(cmd)
     return 1
     
diff --git a/CMSIS/CoreValidation/Tests/buildutils/buildcmd.py b/CMSIS/CoreValidation/Tests/buildutils/buildcmd.py
index 0f6cb12..350a81c 100644
--- a/CMSIS/CoreValidation/Tests/buildutils/buildcmd.py
+++ b/CMSIS/CoreValidation/Tests/buildutils/buildcmd.py
@@ -25,19 +25,19 @@
 
   def run(self):  
     cmd = [ self.getCommand() ] + self.getArguments()
-    print "Running: " + ' '.join(cmd)
+    print("Running: " + ' '.join(cmd))
     try:
       self._result = call(cmd, stdout = self._output)
     except:
-      print "Fatal error!"
+      print("Fatal error!")
     self._output.seek(0)
-    print self._output.read()
+    print(self._output.read())
     
     logfile = self.getLog()
     if logfile != None:
-      print logfile.read()
+      print(logfile.read())
       
-    print "Command returned: {0}".format(self._result)
+    print("Command returned: {0}".format(self._result))
       
     return self._result
     
diff --git a/CMSIS/CoreValidation/Tests/buildutils/fvpcmd.py b/CMSIS/CoreValidation/Tests/buildutils/fvpcmd.py
index 47eabd7..026d224 100644
--- a/CMSIS/CoreValidation/Tests/buildutils/fvpcmd.py
+++ b/CMSIS/CoreValidation/Tests/buildutils/fvpcmd.py
@@ -15,9 +15,9 @@
     
   def getArguments(self):
     args = []
-    if self._args.has_key('limit'):  args += [ "--cyclelimit", self._args['limit'] ] 
-    if self._args.has_key('config'): args += [ "-f", self._args['config'] ]
-    if self._args.has_key('target'):
+    if 'limit' in self._args:  args += [ "--cyclelimit", self._args['limit'] ] 
+    if 'config' in self._args: args += [ "-f", self._args['config'] ]
+    if 'target' in self._args:
       for a in self._app:
         args += [ "-a", "{0}={1}".format(self._args['target'], a ) ]
     else:
diff --git a/CMSIS/CoreValidation/Tests/buildutils/iarcmd.py b/CMSIS/CoreValidation/Tests/buildutils/iarcmd.py
index dabf58f..77ffa81 100644
--- a/CMSIS/CoreValidation/Tests/buildutils/iarcmd.py
+++ b/CMSIS/CoreValidation/Tests/buildutils/iarcmd.py
@@ -1,7 +1,6 @@
 #! python
 
 from buildcmd import BuildCmd
-from string import maketrans
 from datetime import datetime
 import mmap
 
diff --git a/CMSIS/CoreValidation/Tests/buildutils/testresult.py b/CMSIS/CoreValidation/Tests/buildutils/testresult.py
index 98646a3..be71cfc 100644
--- a/CMSIS/CoreValidation/Tests/buildutils/testresult.py
+++ b/CMSIS/CoreValidation/Tests/buildutils/testresult.py
@@ -1,7 +1,7 @@
 #! python
 
 import shutil
-from StringIO import StringIO
+from io import StringIO
 from xml.etree import ElementTree
 
 class TestResult:
diff --git a/CMSIS/CoreValidation/Tests/buildutils/uv4cmd.py b/CMSIS/CoreValidation/Tests/buildutils/uv4cmd.py
index 4788365..a8491e4 100644
--- a/CMSIS/CoreValidation/Tests/buildutils/uv4cmd.py
+++ b/CMSIS/CoreValidation/Tests/buildutils/uv4cmd.py
@@ -2,7 +2,6 @@
 
 import os
 from buildcmd import BuildCmd
-from string import maketrans
 from datetime import datetime
 import mmap
 
@@ -13,8 +12,9 @@
     self._project = project
     self._config = config
     cwd = os.getcwd()
-    self._log = cwd + "\UV4_{0}_{1}.log".format(self._config.translate(maketrans(" ", "_"), "()[],"), datetime.now().strftime("%Y%m%d%H%M%S"))
-    
+    trans = { " " : "_", "(" : None, ")" : None, "[" : None, "]" : None, "," : None }
+    self._log = cwd + "\\UV4_{0}_{1}.log".format(self._config.translate(trans), datetime.now().strftime("%Y%m%d%H%M%S"))
+
   def getCommand(self):
     return "UV4.exe"
     
diff --git a/manifest b/manifest
new file mode 100644
index 0000000..25423d0
--- /dev/null
+++ b/manifest
@@ -0,0 +1,43 @@
+pdsc: ARM.CMSIS.pdsc
+preproc:
+ - clean: CMSIS/Documentation/(Core,Core_A,DAP,Driver,DSP,General,Pack,RTOS,RTOS2,SVD,Zone)
+ - doxygen: CMSIS/DoxyGen/Core/core.dxy
+ - doxygen: CMSIS/DoxyGen/Core_A/core_A.dxy
+ - doxygen: CMSIS/DoxyGen/DAP/dap.dxy
+ - doxygen: CMSIS/DoxyGen/Driver/Driver.dxy
+ - doxygen: CMSIS/DoxyGen/DSP/dsp.dxy
+ - doxygen: CMSIS/DoxyGen/General/general.dxy
+ - doxygen: CMSIS/DoxyGen/Pack/Pack.dxy
+ - doxygen: CMSIS/DoxyGen/RTOS/rtos.dxy
+ - doxygen: CMSIS/DoxyGen/RTOS2/rtos.dxy
+ - doxygen: CMSIS/DoxyGen/SVD/SVD.dxy
+ - doxygen: CMSIS/DoxyGen/Zone/zone.dxy
+glob:
+ - LICENSE.txt
+ - Device/**/*
+ - CMSIS/Core/Include/**/*: CMSIS/Include/
+ - CMSIS/Core/Template/**/*
+ - CMSIS/Core_A/**/*
+ - CMSIS/DAP/**/*
+ - CMSIS/Driver/**/*
+ - CMSIS/DSP/Include/**/*: CMSIS/Include/
+ - CMSIS/DSP/Source/**/*: CMSIS/DSP_Lib/Source/
+ - CMSIS/DSP/Projects/**/*: CMSIS/DSP_Lib/Source/
+ - CMSIS/DSP/Examples/**/*: CMSIS/DSP_Lib/Examples/
+ - CMSIS/Lib/**/*
+ - CMSIS/Pack/**/*
+ - CMSIS/RTOS/**/*
+ - CMSIS/RTOS2/**/*
+ - CMSIS/Utilities/ARM_Example.*: CMSIS/SVD/
+ - CMSIS/Utilities/CMSIS-SVD.xsd
+ - CMSIS/Utilities/PACK.xsd
+ - CMSIS/Utilities/Win32/**/*
+ - CMSIS/Utilities/Linux-gcc-4.4.4/**/*
+ - CMSIS/Utilities/Linux-gcc-4.8.3/**/* 
+ - CMSIS/Documentation/**/*
+ - CMSIS/DoxyGen/Doxygen_Templates/search.css: CMSIS/Documentation/Core/html/search/search.css
+ - CMSIS/DoxyGen/Doxygen_Templates/search.css: CMSIS/Documentation/Core_A/html/search/search.css
+ - CMSIS/DoxyGen/Doxygen_Templates/search.css: CMSIS/Documentation/Driver/html/search/search.css
+ - CMSIS/DoxyGen/Doxygen_Templates/search.css: CMSIS/Documentation/Pack/html/search/search.css
+ - CMSIS/DoxyGen/Doxygen_Templates/search.css: CMSIS/Documentation/DSP/html/search/search.css
+ - CMSIS/DoxyGen/Doxygen_Templates/search.css: CMSIS/Documentation/DAP/html/search/search.css
