diff --git a/src/main/java/net/floodlightcontroller/util/FlowEntryMatch.java b/src/main/java/net/floodlightcontroller/util/FlowEntryMatch.java
new file mode 100644
index 0000000..a8f43f5
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/util/FlowEntryMatch.java
@@ -0,0 +1,105 @@
+package net.floodlightcontroller.util;
+
+import net.floodlightcontroller.util.MACAddress;
+import net.floodlightcontroller.util.IPv4Net;
+
+/**
+ * The class representing the Flow Entry Matching filter.
+ *
+ * The Flow Entry matching filter that is used to specify
+ * the network data that would be forwarded on the data path from
+ * the source to the destination. Examples: MAC address (of the
+ * sender), IP prefix that includes the destination's IP address, etc.
+ *
+ * NOTE: The FlowEntryMatch specification below is incomplete: we need
+ * more matching fields, we need to indicate which fields need to be
+ * matched, etc.
+ */
+public class FlowEntryMatch {
+    private MACAddress srcMac;		// Matching source MAC address
+    private MACAddress dstMac;		// Matching destination MAC address
+    private IPv4Net srcIPv4Net;		// Matching source IPv4 prefix
+    private IPv4Net dstIPv4Net;		// Matching destination IPv4 prefix
+
+    /**
+     * Default constructor.
+     */
+    public FlowEntryMatch() {
+    }
+
+    /**
+     * Get the matching source MAC address.
+     *
+     * @return the matching source MAC address.
+     */
+    public MACAddress srcMac() { return srcMac; }
+
+    /**
+     * Set the matching source MAC address.
+     *
+     * @param srcMac the matching source MAC address to set.
+     */
+    public void setSrcMac(MACAddress srcMac) {
+	this.srcMac = srcMac;
+    }
+
+    /**
+     * Get the matching destination MAC address.
+     *
+     * @return the matching destination MAC address.
+     */
+    public MACAddress dstMac() { return dstMac; }
+
+    /**
+     * Set the matching destination MAC address.
+     *
+     * @param dstMac the matching destination MAC address to set.
+     */
+    public void setDstMac(MACAddress dstMac) {
+	this.dstMac = dstMac;
+    }
+
+    /**
+     * Get the matching source IPv4 prefix.
+     *
+     * @return the matching source IPv4 prefix.
+     */
+    public IPv4Net srcIPv4Net() { return srcIPv4Net; }
+
+    /**
+     * Set the matching source IPv4 prefix.
+     *
+     * @param srcIPv4Net the matching source IPv4 prefix to set.
+     */
+    public void setSrcIPv4Net(IPv4Net srcIPv4Net) {
+	this.srcIPv4Net = srcIPv4Net;
+    }
+
+    /**
+     * Get the matching destination IPv4 prefix.
+     *
+     * @return the matching destination IPv4 prefix.
+     */
+    public IPv4Net dstIPv4Net() { return dstIPv4Net; }
+
+    /**
+     * Set the matching destination IPv4 prefix.
+     *
+     * @param srcIPv4Net the matching destination IPv4 prefix to set.
+     */
+    public void setDstIPv4Net(IPv4Net dstIPv4Net) {
+	this.dstIPv4Net = dstIPv4Net;
+    }
+
+    /**
+     * Convert the matching filter to a string.
+     *
+     * @return the matching filter as a string.
+     */
+    @Override
+    public String toString() {
+	String ret = "";
+	// TODO: Implement it!
+	return ret;
+    }
+}
