diff --git a/src/python/loxi/of13/meter_band.py b/src/python/loxi/of13/meter_band.py
index 814442a..5573beb 100644
--- a/src/python/loxi/of13/meter_band.py
+++ b/src/python/loxi/of13/meter_band.py
@@ -1,6 +1,7 @@
 # Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
 # Copyright (c) 2011, 2012 Open Networking Foundation
 # Copyright (c) 2012, 2013 Big Switch Networks, Inc.
+# See the file LICENSE.pyloxi which should have been included in the source distribution
 
 # Automatically generated by LOXI from template meter_band.py
 # Do not modify
@@ -23,7 +24,7 @@
     pass
 
 class drop(MeterBand):
-    type = const.OFPMBT_DROP
+    type = 1
 
     def __init__(self, rate=None, burst_size=None):
         if rate != None:
@@ -54,11 +55,11 @@
             reader = buf
         else:
             reader = loxi.generic_util.OFReader(buf)
-        _type = reader.read('!H')[0]
-        assert(_type == const.OFPMBT_DROP)
-        _len = reader.read('!H')[0]
-        obj.rate = reader.read('!L')[0]
-        obj.burst_size = reader.read('!L')[0]
+        _type = reader.read("!H")[0]
+        assert(_type == 1)
+        _len = reader.read("!H")[0]
+        obj.rate = reader.read("!L")[0]
+        obj.burst_size = reader.read("!L")[0]
         reader.skip(4)
         return obj
 
@@ -89,7 +90,7 @@
         q.text('}')
 
 class dscp_remark(MeterBand):
-    type = const.OFPMBT_DSCP_REMARK
+    type = 2
 
     def __init__(self, rate=None, burst_size=None, prec_level=None):
         if rate != None:
@@ -125,12 +126,12 @@
             reader = buf
         else:
             reader = loxi.generic_util.OFReader(buf)
-        _type = reader.read('!H')[0]
-        assert(_type == const.OFPMBT_DSCP_REMARK)
-        _len = reader.read('!H')[0]
-        obj.rate = reader.read('!L')[0]
-        obj.burst_size = reader.read('!L')[0]
-        obj.prec_level = reader.read('!B')[0]
+        _type = reader.read("!H")[0]
+        assert(_type == 2)
+        _len = reader.read("!H")[0]
+        obj.rate = reader.read("!L")[0]
+        obj.burst_size = reader.read("!L")[0]
+        obj.prec_level = reader.read("!B")[0]
         reader.skip(3)
         return obj
 
@@ -165,7 +166,7 @@
         q.text('}')
 
 class experimenter(MeterBand):
-    type = const.OFPMBT_EXPERIMENTER
+    type = 65535
 
     def __init__(self, rate=None, burst_size=None, experimenter=None):
         if rate != None:
@@ -200,12 +201,12 @@
             reader = buf
         else:
             reader = loxi.generic_util.OFReader(buf)
-        _type = reader.read('!H')[0]
-        assert(_type == const.OFPMBT_EXPERIMENTER)
-        _len = reader.read('!H')[0]
-        obj.rate = reader.read('!L')[0]
-        obj.burst_size = reader.read('!L')[0]
-        obj.experimenter = reader.read('!L')[0]
+        _type = reader.read("!H")[0]
+        assert(_type == 65535)
+        _len = reader.read("!H")[0]
+        obj.rate = reader.read("!L")[0]
+        obj.burst_size = reader.read("!L")[0]
+        obj.experimenter = reader.read("!L")[0]
         return obj
 
     def __eq__(self, other):
