diff --git a/src/base/filters/BloomFilters.py b/src/base/filters/BloomFilters.py
index b3460d7..09dda4f 100644
--- a/src/base/filters/BloomFilters.py
+++ b/src/base/filters/BloomFilters.py
@@ -92,3 +92,11 @@
 
     # By default match this with the number of sub-filters
     threshold = 2
+
+class BloomFilterPerfect(BloomFilterBase):
+    type = 'BloomFilterPerfect'
+    cxx_class = 'BloomFilter::Perfect'
+    cxx_header = "base/filters/perfect_bloom_filter.hh"
+
+    # The base filter is not needed. Use a dummy value.
+    size = 1
diff --git a/src/base/filters/SConscript b/src/base/filters/SConscript
index 2545312..8c0ee84 100644
--- a/src/base/filters/SConscript
+++ b/src/base/filters/SConscript
@@ -39,3 +39,4 @@
 Source('h3_bloom_filter.cc')
 Source('multi_bit_sel_bloom_filter.cc')
 Source('multi_bloom_filter.cc')
+Source('perfect_bloom_filter.cc')
diff --git a/src/base/filters/perfect_bloom_filter.cc b/src/base/filters/perfect_bloom_filter.cc
new file mode 100644
index 0000000..61a5a79
--- /dev/null
+++ b/src/base/filters/perfect_bloom_filter.cc
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2019 Inria
+ * 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: Daniel Carvalho
+ */
+
+#include "base/filters/perfect_bloom_filter.hh"
+
+#include "params/BloomFilterPerfect.hh"
+
+namespace BloomFilter {
+
+Perfect::Perfect(const BloomFilterPerfectParams* p)
+    : Base(p)
+{
+}
+
+Perfect::~Perfect()
+{
+}
+
+void
+Perfect::clear()
+{
+    entries.clear();
+}
+
+void
+Perfect::merge(const Base* other)
+{
+    auto* cast_other = static_cast<const Perfect*>(other);
+    entries.insert(cast_other->entries.begin(), cast_other->entries.end());
+}
+
+void
+Perfect::set(Addr addr)
+{
+    entries.insert(addr);
+}
+
+void
+Perfect::unset(Addr addr)
+{
+    entries.erase(addr);
+}
+
+int
+Perfect::getCount(Addr addr) const
+{
+    return entries.find(addr) != entries.end();
+}
+
+int
+Perfect::getTotalCount() const
+{
+    return entries.size();
+}
+
+} // namespace BloomFilter
+
+BloomFilter::Perfect*
+BloomFilterPerfectParams::create()
+{
+    return new BloomFilter::Perfect(this);
+}
+
diff --git a/src/base/filters/perfect_bloom_filter.hh b/src/base/filters/perfect_bloom_filter.hh
new file mode 100644
index 0000000..92b4b39
--- /dev/null
+++ b/src/base/filters/perfect_bloom_filter.hh
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2019 Inria
+ * 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: Daniel Carvalho
+ */
+
+#ifndef __BASE_FILTERS_PERFECT_BLOOM_FILTER_HH__
+#define __BASE_FILTERS_PERFECT_BLOOM_FILTER_HH__
+
+#include <unordered_set>
+
+#include "base/filters/base.hh"
+
+struct BloomFilterPerfectParams;
+
+namespace BloomFilter {
+
+/**
+ * A perfect bloom filter with no false positives nor false negatives.
+ */
+class Perfect : public Base
+{
+  public:
+    Perfect(const BloomFilterPerfectParams* p);
+    ~Perfect();
+
+    void clear() override;
+    void set(Addr addr) override;
+    void unset(Addr addr) override;
+
+    void merge(const Base* other) override;
+    int getCount(Addr addr) const override;
+    int getTotalCount() const override;
+
+  private:
+    /** Container storing all set (seen) entries. */
+    std::unordered_set<Addr> entries;
+};
+
+} // namespace BloomFilter
+
+#endif // __BASE_FILTERS_PERFECT_BLOOM_FILTER_HH__
