diff --git a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
index 00f5590..f78b9e4 100644
--- a/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
+++ b/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
@@ -16,14 +16,15 @@
 
 package org.onosproject.pipelines.fabric;
 
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.model.PiMatchFieldId;
+import org.onosproject.net.pi.model.PiCounterId;
 import org.onosproject.net.pi.model.PiActionId;
 import org.onosproject.net.pi.model.PiActionParamId;
 import org.onosproject.net.pi.model.PiActionProfileId;
-import org.onosproject.net.pi.model.PiMeterId;
 import org.onosproject.net.pi.model.PiPacketMetadataId;
-import org.onosproject.net.pi.model.PiCounterId;
-import org.onosproject.net.pi.model.PiMatchFieldId;
-import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.model.PiMeterId;
+
 /**
  * Constants for fabric pipeline.
  */
diff --git a/pipelines/fabric/impl/src/main/resources/Makefile b/pipelines/fabric/impl/src/main/resources/Makefile
index 11cdba9..12e53d7 100644
--- a/pipelines/fabric/impl/src/main/resources/Makefile
+++ b/pipelines/fabric/impl/src/main/resources/Makefile
@@ -24,7 +24,7 @@
 ifndef ONOS_ROOT
 	$(error ONOS_ROOT is undefined)
 endif
-	docker run -v $(ONOS_ROOT):/onos -w /onos/tools/dev/bin \
+	docker run --rm -v $(ONOS_ROOT):/onos -w /onos/tools/dev/bin \
 		--entrypoint ./onos-gen-p4-constants opennetworking/p4mn:stable \
 		-o /onos/pipelines/fabric/api/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java \
 		fabric /onos/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
diff --git a/tools/dev/bin/onos-gen-p4-constants b/tools/dev/bin/onos-gen-p4-constants
index 07530d6..36b75bd 100755
--- a/tools/dev/bin/onos-gen-p4-constants
+++ b/tools/dev/bin/onos-gen-p4-constants
@@ -22,15 +22,17 @@
  */
 '''
 
+IMPORT_ACTION_ID = "import org.onosproject.net.pi.model.PiActionId;"
+IMPORT_ACTION_PARAM_ID = "import org.onosproject.net.pi.model.PiActionParamId;"
+IMPORT_ACTION_PROFILE_ID = "import org.onosproject.net.pi.model.PiActionProfileId;"
+IMPORT_METER_ID = "import org.onosproject.net.pi.model.PiMeterId;"
+IMPORT_PACKET_METADATA_ID = "import org.onosproject.net.pi.model.PiPacketMetadataId;"
+IMPORT_COUNTER_ID = "import org.onosproject.net.pi.model.PiCounterId;"
+IMPORT_MATCH_FIELD_ID = "import org.onosproject.net.pi.model.PiMatchFieldId;"
+IMPORT_TABLE_ID = "import org.onosproject.net.pi.model.PiTableId;"
+
 imports = '''
-import org.onosproject.net.pi.model.PiActionId;
-import org.onosproject.net.pi.model.PiActionParamId;
-import org.onosproject.net.pi.model.PiActionProfileId;
-import org.onosproject.net.pi.model.PiMeterId;
-import org.onosproject.net.pi.model.PiPacketMetadataId;
-import org.onosproject.net.pi.model.PiCounterId;
-import org.onosproject.net.pi.model.PiMatchFieldId;
-import org.onosproject.net.pi.model.PiTableId;'''
+'''
 
 PKG_FMT = 'package %s;'
 DEFAULT_PKG_PATH = 'org.onosproject.pipelines.%s'
@@ -92,6 +94,7 @@
     action_profiles = set()
     packet_metadata = set()
     meters = set()
+    direct_meters = set()
 
     # https://stackoverflow.com/questions/1175208/elegant-python-function-to-convert-camelcase-to-snake-case
     def convert_camel_to_all_caps(self, name):
@@ -106,33 +109,59 @@
         self.java_doc = JAVA_DOC_FMT % (base_name, )
 
     def parse(self, p4info):
+        global imports
+
+        if len(p4info.tables) > 0:
+            imports += IMPORT_TABLE_ID + "\n"
+            imports += IMPORT_MATCH_FIELD_ID + "\n"
+
         for tbl in p4info.tables:
             for mf in tbl.match_fields:
                 self.header_fields.add(mf.name)
 
             self.tables.add(tbl.preamble.name)
 
+        if len(p4info.counters) > 0 or len(p4info.direct_counters) > 0:
+            imports += IMPORT_COUNTER_ID + "\n"
+
         for ctr in p4info.counters:
             self.counters.add(ctr.preamble.name)
 
         for dir_ctr in p4info.direct_counters:
             self.direct_counters.add(dir_ctr.preamble.name)
 
+        if len(p4info.actions) > 0:
+            imports += IMPORT_ACTION_ID + "\n"
+            imports += IMPORT_ACTION_PARAM_ID + "\n"
+
         for act in p4info.actions:
             self.actions.add(act.preamble.name)
 
             for param in act.params:
                 self.action_params.add(param.name)
 
+        if len(p4info.action_profiles) > 0:
+            imports += IMPORT_ACTION_PROFILE_ID + "\n"
+
         for act_prof in p4info.action_profiles:
             self.action_profiles.add(act_prof.preamble.name)
 
+        if len(p4info.controller_packet_metadata) > 0:
+            imports += IMPORT_PACKET_METADATA_ID + "\n"
+
         for cpm in p4info.controller_packet_metadata:
             for mta in cpm.metadata:
                 self.packet_metadata.add(mta.name)
+
+        if len(p4info.meters) > 0 or len(p4info.direct_meters) > 0:
+            imports += IMPORT_METER_ID + "\n"
+
         for mtr in p4info.meters:
             self.meters.add(mtr.preamble.name)
 
+        for dir_mtr in p4info.direct_meters:
+            self.direct_meters.add(dir_mtr.preamble.name)
+
     def const_line(self, name, type, constructor):
         var_name = self.convert_camel_to_all_caps(name)
         if type == PI_HF_FIELD_ID:
@@ -199,6 +228,12 @@
             lines.append('    // Meter IDs')
         for mtr in self.meters:
             lines.append(self.const_line(mtr, PI_METER_ID, PI_METER_ID_CST))
+
+        if len(self.direct_meters) is not 0:
+            lines.append('    // Direct Meter IDs')
+        for mtr in self.direct_meters:
+            lines.append(self.const_line(mtr, PI_METER_ID, PI_METER_ID_CST))
+
         lines.append(CLASS_CLOSE)
         # end of class
 
@@ -240,11 +275,11 @@
 
     if output == '-':
         # std output
-        print java_code
+        print(java_code)
     else:
         with open(output, 'w') as output_file:
             output_file.write(java_code)
 
 
 if __name__ == '__main__':
-    main()
+    main()
\ No newline at end of file
