diff --git a/gen_occ_map.pl b/gen_occ_map.pl
new file mode 100755
index 0000000..0aba66a
--- /dev/null
+++ b/gen_occ_map.pl
@@ -0,0 +1,126 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use mrw::Targets; # Set of APIs allowing access to parsed ServerWiz2 XML output
+use mrw::Inventory; # To get list of Inventory targets
+use Getopt::Long; # For parsing command line arguments
+use POSIX; # For checking if something is a digit
+
+# Globals
+my $force           = 0;
+my $serverwizFile  = "";
+my $debug           = 0;
+my $outputFile     = "";
+my $verbose         = 0;
+
+# Command line argument parsing
+GetOptions(
+"f"   => \$force,             # numeric
+"i=s" => \$serverwizFile,    # string
+"o=s" => \$outputFile,       # string
+"d"   => \$debug,
+"v"   => \$verbose,
+)
+or printUsage();
+
+if (($serverwizFile eq "") or ($outputFile eq ""))
+{
+    printUsage();
+}
+
+# Hashmap of all the OCCs and their sensor IDs
+my %occHash;
+
+# API used to access parsed XML data
+my $targetObj = Targets->new;
+if($verbose == 1)
+{
+    $targetObj->{debug} = 1;
+}
+
+if($force == 1)
+{
+    $targetObj->{force} = 1;
+}
+
+$targetObj->loadXML($serverwizFile);
+print "Loaded MRW XML: $serverwizFile \n";
+
+# Process all the targets in the XML
+foreach my $target (sort keys %{$targetObj->getAllTargets()})
+{
+    # Only take the instances having 'OCC" as TYPE
+    if ("OCC" ne $targetObj->getAttribute($target, "TYPE"))
+    {
+        next;
+    }
+
+    # OCC instance and sensor ID to insert into output file
+    my $instance = "";
+    my $sensor = "";
+
+    # Now that we are in OCC target instance, get the instance number
+    $instance = $targetObj->getAttribute($target, "IPMI_INSTANCE");
+
+    # Each OCC would have occ_active_sensor child that would have
+    # more information, such as Sensor ID.
+    # This would be an array of children targets
+    my $children = $targetObj->getTargetChildren($target);
+
+    for my $child (@{$children})
+    {
+        $sensor = $targetObj->getAttribute($child, "IPMI_SENSOR_ID");
+    }
+
+    # Populate a hashmap with OCC and its sensor ID
+    $occHash{$instance} = $sensor;
+
+} # All the targets
+
+# Generate the yaml file
+generateYamlFile();
+##------------------------------------END OF MAIN-----------------------
+
+sub generateYamlFile
+{
+    my $fileName = $outputFile;
+    open(my $fh, '>', $fileName) or die "Could not open file '$fileName' $!";
+
+    foreach my $instance (sort keys %occHash)
+    {
+        # If the instance is not a digit, then error
+        isdigit($instance) or die "'$instance' does not have instance number";
+
+        # YAML with list of {Instance:SensorID} dictionary
+        print $fh "- Instance: ";
+        print $fh "$instance\n";
+        print $fh "  SensorID: ";
+        print $fh "$occHash{$instance}\n";
+    }
+    close $fh;
+}
+
+# Helper function to put debug statements.
+sub printDebug
+{
+    my $str = shift;
+    print "DEBUG: ", $str, "\n" if $debug;
+}
+
+# Usage
+sub printUsage
+{
+    print "
+    $0 -i [XML filename] -o [Output filename] [OPTIONS]
+Options:
+    -f = force output file creation even when errors
+    -d = debug mode
+    -v = verbose mode - for verbose o/p from Targets.pm
+
+PS: mrw::Targets can be found in https://github.com/open-power/serverwiz/
+    mrw::Inventory can be found in https://github.com/openbmc/phosphor-mrw-tools/
+    \n";
+    exit(1);
+}
+#------------------------------------END OF SUB-----------------------
