diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py
index cbcc792..330cc03 100644
--- a/src/mem/slicc/symbols/StateMachine.py
+++ b/src/mem/slicc/symbols/StateMachine.py
@@ -26,7 +26,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from m5.util import orderdict
+from collections import OrderedDict
 
 from slicc.symbols.Symbol import Symbol
 from slicc.symbols.Var import Var
@@ -78,10 +78,10 @@
             if str(param.type_ast.type) == "Prefetcher":
                 self.prefetchers.append(var)
 
-        self.states = orderdict()
-        self.events = orderdict()
-        self.actions = orderdict()
-        self.request_types = orderdict()
+        self.states = OrderedDict()
+        self.events = OrderedDict()
+        self.actions = OrderedDict()
+        self.request_types = OrderedDict()
         self.transitions = []
         self.in_ports = []
         self.functions = []
@@ -1303,7 +1303,7 @@
 ''')
 
         # This map will allow suppress generating duplicate code
-        cases = orderdict()
+        cases = OrderedDict()
 
         for trans in self.transitions:
             case_string = "%s_State_%s, %s_Event_%s" % \
diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py
index 37c0b16..162c1ab 100644
--- a/src/mem/slicc/symbols/Type.py
+++ b/src/mem/slicc/symbols/Type.py
@@ -25,7 +25,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from m5.util import orderdict
+from collections import OrderedDict
 
 from slicc.util import PairContainer
 from slicc.symbols.Symbol import Symbol
@@ -89,9 +89,9 @@
         self.isStateDecl = ("state_decl" in self)
         self.statePermPairs = []
 
-        self.data_members = orderdict()
+        self.data_members = OrderedDict()
         self.methods = {}
-        self.enums = orderdict()
+        self.enums = OrderedDict()
 
     @property
     def isPrimitive(self):
diff --git a/src/python/SConscript b/src/python/SConscript
index 19fb386..36e0d5b 100644
--- a/src/python/SConscript
+++ b/src/python/SConscript
@@ -55,7 +55,6 @@
 PySource('m5.util', 'm5/util/grammar.py')
 PySource('m5.util', 'm5/util/jobfile.py')
 PySource('m5.util', 'm5/util/multidict.py')
-PySource('m5.util', 'm5/util/orderdict.py')
 PySource('m5.util', 'm5/util/smartdict.py')
 PySource('m5.util', 'm5/util/sorteddict.py')
 PySource('m5.util', 'm5/util/terminal.py')
diff --git a/src/python/m5/util/__init__.py b/src/python/m5/util/__init__.py
index 02dece6..341e54f 100644
--- a/src/python/m5/util/__init__.py
+++ b/src/python/m5/util/__init__.py
@@ -51,7 +51,6 @@
 from attrdict import attrdict, multiattrdict, optiondict
 from code_formatter import code_formatter
 from multidict import multidict
-from orderdict import orderdict
 from smartdict import SmartDict
 from sorteddict import SortedDict
 
diff --git a/src/python/m5/util/orderdict.py b/src/python/m5/util/orderdict.py
deleted file mode 100644
index 1ffbca8..0000000
--- a/src/python/m5/util/orderdict.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright (c) 2005 The Regents of The University of Michigan
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Authors: Nathan Binkert
-
-__all__ = [ 'orderdict' ]
-
-from UserDict import DictMixin
-
-class orderdict(dict, DictMixin):
-    def __init__(self, *args, **kwargs):
-        if len(args) > 1:
-            raise TypeError("expected at most one argument, got %d" % \
-                            len(args))
-        self._keys = []
-        self.update(*args, **kwargs)
-
-    def __setitem__(self, key, item):
-        if key not in self:
-            self._keys.append(key)
-        super(orderdict, self).__setitem__(key, item)
-
-    def __delitem__(self, key):
-        super(orderdict, self).__delitem__(key)
-        self._keys.remove(key)
-
-    def clear(self):
-        super(orderdict, self).clear()
-        self._keys = []
-
-    def iterkeys(self):
-        for key in self._keys:
-            yield key
-
-    def itervalues(self):
-        for key in self._keys:
-            yield self[key]
-
-    def iteritems(self):
-        for key in self._keys:
-            yield key, self[key]
-
-    def keys(self):
-        return self._keys[:]
-
-    def values(self):
-        return [ self[key] for key in self._keys ]
-
-    def items(self):
-        return [ (self[key],key) for key in self._keys ]
diff --git a/util/stats/profile.py b/util/stats/profile.py
index 6959e0e..3bd3666 100644
--- a/util/stats/profile.py
+++ b/util/stats/profile.py
@@ -26,7 +26,6 @@
 #
 # Authors: Nathan Binkert
 
-from orderdict import orderdict
 import output
 
 class FileData(dict):
