diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc
index 980aa91..497f75c 100644
--- a/src/mem/cache/base.cc
+++ b/src/mem/cache/base.cc
@@ -118,7 +118,7 @@
 
     tempBlock = new TempCacheBlk(blkSize);
 
-    tags->tagsInit(this);
+    tags->tagsInit();
     if (prefetcher)
         prefetcher->setCache(this);
 }
diff --git a/src/mem/cache/tags/Tags.py b/src/mem/cache/tags/Tags.py
index b34779e..f2658f4 100644
--- a/src/mem/cache/tags/Tags.py
+++ b/src/mem/cache/tags/Tags.py
@@ -44,6 +44,10 @@
     type = 'BaseTags'
     abstract = True
     cxx_header = "mem/cache/tags/base.hh"
+
+    # Get system to which it belongs
+    system = Param.System(Parent.any, "System we belong to")
+
     # Get the size from the parent (cache)
     size = Param.MemorySize(Parent.size, "capacity in bytes")
 
diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc
index 5fbbdc1..7237f18 100644
--- a/src/mem/cache/tags/base.cc
+++ b/src/mem/cache/tags/base.cc
@@ -51,7 +51,6 @@
 #include <cassert>
 
 #include "base/types.hh"
-#include "mem/cache/base.hh"
 #include "mem/cache/replacement_policies/replaceable_entry.hh"
 #include "mem/cache/tags/indexing_policies/base.hh"
 #include "mem/request.hh"
@@ -62,20 +61,13 @@
 BaseTags::BaseTags(const Params *p)
     : ClockedObject(p), blkSize(p->block_size), blkMask(blkSize - 1),
       size(p->size), lookupLatency(p->tag_latency),
-      cache(nullptr), indexingPolicy(p->indexing_policy),
+      system(p->system), indexingPolicy(p->indexing_policy),
       warmupBound((p->warmup_percentage/100.0) * (p->size / p->block_size)),
       warmedUp(false), numBlocks(p->size / p->block_size),
       dataBlks(new uint8_t[p->size]) // Allocate data storage in one big chunk
 {
 }
 
-void
-BaseTags::setCache(BaseCache *_cache)
-{
-    assert(!cache);
-    cache = _cache;
-}
-
 ReplaceableEntry*
 BaseTags::findBlockBySetAndWay(int set, int way) const
 {
@@ -115,7 +107,7 @@
     // Previous block, if existed, has been removed, and now we have
     // to insert the new one
     // Deal with what we are bringing in
-    assert(src_master_ID < cache->system->maxMasters());
+    assert(src_master_ID < system->maxMasters());
     occupancies[src_master_ID]++;
 
     // Insert block with tag, src master id and task id
@@ -243,13 +235,13 @@
         ;
 
     occupancies
-        .init(cache->system->maxMasters())
+        .init(system->maxMasters())
         .name(name() + ".occ_blocks")
         .desc("Average occupied blocks per requestor")
         .flags(nozero | nonan)
         ;
-    for (int i = 0; i < cache->system->maxMasters(); i++) {
-        occupancies.subname(i, cache->system->getMasterName(i));
+    for (int i = 0; i < system->maxMasters(); i++) {
+        occupancies.subname(i, system->getMasterName(i));
     }
 
     avgOccs
@@ -257,8 +249,8 @@
         .desc("Average percentage of cache occupancy")
         .flags(nozero | total)
         ;
-    for (int i = 0; i < cache->system->maxMasters(); i++) {
-        avgOccs.subname(i, cache->system->getMasterName(i));
+    for (int i = 0; i < system->maxMasters(); i++) {
+        avgOccs.subname(i, system->getMasterName(i));
     }
 
     avgOccs = occupancies / Stats::constant(numBlocks);
diff --git a/src/mem/cache/tags/base.hh b/src/mem/cache/tags/base.hh
index 273abf5..840193b 100644
--- a/src/mem/cache/tags/base.hh
+++ b/src/mem/cache/tags/base.hh
@@ -61,7 +61,7 @@
 #include "params/BaseTags.hh"
 #include "sim/clocked_object.hh"
 
-class BaseCache;
+class System;
 class IndexingPolicy;
 class ReplaceableEntry;
 
@@ -80,8 +80,8 @@
     /** The tag lookup latency of the cache. */
     const Cycles lookupLatency;
 
-    /** Pointer to the parent cache. */
-    BaseCache *cache;
+    /** System we are currently operating in. */
+    System *system;
 
     /** Indexing policy */
     BaseIndexingPolicy *indexingPolicy;
@@ -153,13 +153,6 @@
      * @}
      */
 
-    /**
-     * Set the parent cache back pointer.
-     *
-     * @param _cache Pointer to parent cache.
-     */
-    void setCache(BaseCache *_cache);
-
   public:
     typedef BaseTagsParams Params;
     BaseTags(const Params *p);
@@ -170,11 +163,11 @@
     virtual ~BaseTags() {}
 
     /**
-     * Initialize blocks and set the parent cache back pointer.
-     *
-     * @param _cache Pointer to parent cache.
+     * Initialize blocks. Must be overriden by every subclass that uses
+     * a block type different from its parent's, as the current Python
+     * code generation does not allow templates.
      */
-    virtual void tagsInit(BaseCache *_cache) = 0;
+    virtual void tagsInit() = 0;
 
     /**
      * Register local statistics.
diff --git a/src/mem/cache/tags/base_set_assoc.cc b/src/mem/cache/tags/base_set_assoc.cc
index b3b7731..1b53ef0 100644
--- a/src/mem/cache/tags/base_set_assoc.cc
+++ b/src/mem/cache/tags/base_set_assoc.cc
@@ -63,11 +63,8 @@
 }
 
 void
-BaseSetAssoc::tagsInit(BaseCache* cache)
+BaseSetAssoc::tagsInit()
 {
-    // Set parent cache
-    setCache(cache);
-
     // Initialize all blocks
     for (unsigned blk_index = 0; blk_index < numBlocks; blk_index++) {
         // Locate next cache block
diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh
index bc98afa..b1fa884 100644
--- a/src/mem/cache/tags/base_set_assoc.hh
+++ b/src/mem/cache/tags/base_set_assoc.hh
@@ -99,11 +99,9 @@
     virtual ~BaseSetAssoc() {};
 
     /**
-     * Initialize blocks and set the parent cache back pointer.
-     *
-     * @param _cache Pointer to parent cache.
+     * Initialize blocks as CacheBlk instances.
      */
-    void tagsInit(BaseCache *_cache) override;
+    void tagsInit() override;
 
     /**
      * This function updates the tags when a block is invalidated. It also
diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc
index 9648468..b1f9bbc 100644
--- a/src/mem/cache/tags/fa_lru.cc
+++ b/src/mem/cache/tags/fa_lru.cc
@@ -84,11 +84,8 @@
 }
 
 void
-FALRU::tagsInit(BaseCache* cache)
+FALRU::tagsInit()
 {
-    // Set parent cache
-    setCache(cache);
-
     head = &(blks[0]);
     head->prev = nullptr;
     head->next = &(blks[1]);
diff --git a/src/mem/cache/tags/fa_lru.hh b/src/mem/cache/tags/fa_lru.hh
index 1de6de4..0cae1de 100644
--- a/src/mem/cache/tags/fa_lru.hh
+++ b/src/mem/cache/tags/fa_lru.hh
@@ -159,11 +159,9 @@
     ~FALRU();
 
     /**
-     * Initialize blocks and set the parent cache back pointer.
-     *
-     * @param _cache Pointer to parent cache.
+     * Initialize blocks as FALRUBlk instances.
      */
-    void tagsInit(BaseCache *_cache) override;
+    void tagsInit() override;
 
     /**
      * Register the stats for this object.
diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc
index 02649cc..68440c2 100644
--- a/src/mem/cache/tags/sector_tags.cc
+++ b/src/mem/cache/tags/sector_tags.cc
@@ -64,11 +64,8 @@
 }
 
 void
-SectorTags::tagsInit(BaseCache* cache)
+SectorTags::tagsInit()
 {
-    // Set parent cache
-    setCache(cache);
-
     // Initialize all blocks
     unsigned blk_index = 0;       // index into blks array
     for (unsigned sec_blk_index = 0; sec_blk_index < numSectors;
diff --git a/src/mem/cache/tags/sector_tags.hh b/src/mem/cache/tags/sector_tags.hh
index f9d47f3..e3c0fa4 100644
--- a/src/mem/cache/tags/sector_tags.hh
+++ b/src/mem/cache/tags/sector_tags.hh
@@ -101,11 +101,9 @@
     virtual ~SectorTags() {};
 
     /**
-     * Initialize blocks and set the parent cache back pointer.
-     *
-     * @param _cache Pointer to parent cache.
+     * Initialize blocks as SectorBlk and SectorSubBlk instances.
      */
-    void tagsInit(BaseCache *_cache) override;
+    void tagsInit() override;
 
     /**
      * This function updates the tags when a block is invalidated but does
