diff --git a/CMSIS/Utilities/buildutils/.gitignore b/CMSIS/Utilities/buildutils/.gitignore
deleted file mode 100644
index 7e99e36..0000000
--- a/CMSIS/Utilities/buildutils/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
\ No newline at end of file
diff --git a/CMSIS/Utilities/buildutils/__init__.py b/CMSIS/Utilities/buildutils/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/CMSIS/Utilities/buildutils/__init__.py
+++ /dev/null
diff --git a/CMSIS/Utilities/buildutils/buildcmd.py b/CMSIS/Utilities/buildutils/buildcmd.py
deleted file mode 100644
index ceabe64..0000000
--- a/CMSIS/Utilities/buildutils/buildcmd.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#! python
-
-from subprocess import call, Popen
-from tempfile import TemporaryFile
-
-class BuildCmd:
-  def __init__(self):
-    self._result = -1
-    self._output = TemporaryFile(mode="r+")
-  
-  def getCommand(self):
-    raise NotImplementedError
-    
-  def getArguments(self):
-    return []
-    
-  def getOutput(self):
-    return self._output
-
-  def getLog(self):
-    return None
-    
-  def isSuccess(self):
-    return self._output == 0
-
-  def run(self):  
-    cmd = [ self.getCommand() ] + self.getArguments()
-    print "Running: " + ' '.join(cmd)
-    try:
-      self._result = call(cmd, stdout = self._output)
-    except:
-      print "Fatal error!"
-    self._output.seek(0)
-    print self._output.read()
-    
-    logfile = self.getLog()
-    if logfile != None:
-      print logfile.read()
-      
-    print "Command returned: {0}".format(self._result)
-      
-    return self._result
-    
\ No newline at end of file
diff --git a/CMSIS/Utilities/buildutils/dircmd.py b/CMSIS/Utilities/buildutils/dircmd.py
deleted file mode 100644
index 5a0f211..0000000
--- a/CMSIS/Utilities/buildutils/dircmd.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#! python
-
-from buildcmd import BuildCmd
-
-class DirCmd(BuildCmd):
-
-  def __init__(self):
-    BuildCmd.__init__(self)
-    
-  def getCommand(self):
-    return "dir"
-
-    
\ No newline at end of file
diff --git a/CMSIS/Utilities/buildutils/fvpcmd.py b/CMSIS/Utilities/buildutils/fvpcmd.py
deleted file mode 100644
index d3a4d94..0000000
--- a/CMSIS/Utilities/buildutils/fvpcmd.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#! python
-
-from buildcmd import BuildCmd
-
-class FvpCmd(BuildCmd):
-
-  def __init__(self, model, app, **args):
-    BuildCmd.__init__(self)
-    self._model = model
-    self._app = app
-    self._args = args
-    
-  def getCommand(self):
-    return self._model
-    
-  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'):
-      args += [ "-a", "{0}={1}".format(self._args['target'], self._app ) ]
-    else:
-      args += [ self._app ]
-    return args
-    
\ No newline at end of file
diff --git a/CMSIS/Utilities/buildutils/iarcmd.py b/CMSIS/Utilities/buildutils/iarcmd.py
deleted file mode 100644
index dabf58f..0000000
--- a/CMSIS/Utilities/buildutils/iarcmd.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#! python
-
-from buildcmd import BuildCmd
-from string import maketrans
-from datetime import datetime
-import mmap
-
-class IarCmd(BuildCmd):
-
-  def __init__(self, project, config):
-    BuildCmd.__init__(self)
-    self._project = project
-    self._config = config
-    self._log = "iar_{0}.log".format(datetime.now().strftime("%Y%m%d%H%M%S"))
-    
-  def getCommand(self):
-    return "iarbuild.exe"
-    
-  def getArguments(self):
-    return [ self._project, "-build", self._config ]
-  
-  def isSuccess(self):
-    return self._result <= 1
-
-  def getLog(self):
-    try:
-      return open(self._log, "r")
-    except:
-      return None
diff --git a/CMSIS/Utilities/buildutils/testresult.py b/CMSIS/Utilities/buildutils/testresult.py
deleted file mode 100644
index 98646a3..0000000
--- a/CMSIS/Utilities/buildutils/testresult.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#! python
-
-import shutil
-from StringIO import StringIO
-from xml.etree import ElementTree
-
-class TestResult:
-
-  def _extractXml(self, log, xml):
-    dump = False
-    log.seek(0)
-    for line in log:
-      if dump:
-        xml.write(line)
-        if line.strip() == '</report>':
-          dump = False
-      else:
-        if line.strip() == '<?xml version="1.0"?>':
-          dump = True
-          xml.write(line)
-
-  def __init__(self, log):
-    self._xml = StringIO()
-    self._extractXml(log, self._xml)
-    self._xml.seek(0)
-  
-    try:
-      report = ElementTree.parse(self._xml).getroot()
-      summary = report[0].findall('summary')[0]
-      self._tests = summary.find('tcnt').text
-      self._executed = summary.find('exec').text
-      self._passed = summary.find('pass').text
-      self._failed = summary.find('fail').text
-      self._avail = True
-    except ElementTree.ParseError as e:
-      self._avail = False
-      self._except = e
-          
-  def saveXml(self, filename):
-    with open(filename, "w") as file:
-      self._xml.seek(0)
-      shutil.copyfileobj(self._xml, file)
-    
-  def isAvailable(self):
-    return self._avail
-    
-  def getSummary(self):
-    if self._avail:
-      return self._tests, self._executed, self._passed, self._failed
-    else:
-      raise self._except
\ No newline at end of file
diff --git a/CMSIS/Utilities/buildutils/uv4cmd.py b/CMSIS/Utilities/buildutils/uv4cmd.py
deleted file mode 100644
index 8c7f932..0000000
--- a/CMSIS/Utilities/buildutils/uv4cmd.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#! python
-
-from buildcmd import BuildCmd
-from string import maketrans
-from datetime import datetime
-import mmap
-
-class Uv4Cmd(BuildCmd):
-
-  def __init__(self, project, config):
-    BuildCmd.__init__(self)
-    self._project = project
-    self._config = config
-    self._log = "UV4_{0}_{1}.log".format(self._config.translate(maketrans(" ", "_"), "()[],"), datetime.now().strftime("%Y%m%d%H%M%S"))
-    
-  def getCommand(self):
-    return "UV4.exe"
-    
-  def getArguments(self):
-    return [ "-t", self._config, "-cr", self._project, "-j0", "-o", self._log ]
-  
-  def isSuccess(self):
-    return self._result <= 1
-
-  def getLog(self):
-    try:
-      return open(self._log, "r")
-    except:
-      return None
