diff --git a/include/Adt/AdtDialect.h b/include/Adt/AdtDialect.h
index c3857c6ecc68feadbb1323dafea3a4c8e175bd90..4a3b5767110544b2f32fb302d3970753edbdef75 100644
--- a/include/Adt/AdtDialect.h
+++ b/include/Adt/AdtDialect.h
@@ -3,9 +3,9 @@
 
 #include <mlir/IR/Types.h>
 #include <mlir/IR/DialectImplementation.h>
-#include "mlir/IR/BuiltinOps.h"
-#include "mlir/IR/BuiltinDialect.h"
-#include "mlir/IR/BuiltinTypes.h"
+#include <mlir/IR/BuiltinOps.h>
+#include <mlir/IR/BuiltinDialect.h>
+#include <mlir/IR/BuiltinTypes.h>
 
 namespace mlir::adt{
 
@@ -19,16 +19,13 @@ namespace mlir::adt{
         /// register attributes, operations, types, and more within the Toy dialect.
         void initialize();
 
-        mlir::Type parseType(mlir::DialectAsmParser &parser) const;
+        mlir::Type parseType(mlir::DialectAsmParser &parser) const override;
         /// Cette fonction nous permet de print en format mlir une instance des types sources
-        void printType(mlir::Type type, mlir::DialectAsmPrinter &printer) const;
+        void printType(mlir::Type type, mlir::DialectAsmPrinter &printer) const override;
     };
 
     struct AdtTypeStorage;
 
-/// This class defines the adt source types.
-
-    class Tag;
     class TypeSource{
     public:
         static TypeSource parseType(::mlir::DialectAsmParser &parser);
@@ -51,9 +48,6 @@ namespace mlir::adt{
             typeSource(srcTy), typeMem(memTy) {
             llvm::errs() << "building an over-engineered AdtType\n";
         }
-        // Creating an instance of a 'TypeSource' with the geven element types.
-        //static AdtType getTag(llvm::ArrayRef<Tag> elementTypes);
-        //static AdtType getType(llvm::ArrayRef<Type> elementTypes);
         // cf. https://mlir.llvm.org/docs/Tutorials/Toy/Ch-7/
         static AdtType get(MLIRContext* ctx, TypeSource srcTy, TypeMem memTy) {
             //mlir::MLIRContext* ctx = srcTy.getMLIRContext();
@@ -62,20 +56,6 @@ namespace mlir::adt{
             return AdtType(ctx, srcTy, memTy);
         }
     };
-
-    class Tag{
-        private: mlir::Type srcType;
-        private: StringRef constructor;
-        public: void setConstructor(StringRef* name){
-                constructor = *name;
-            }
-        public: void setTypeSource(mlir::Type* newSrcType){
-                srcType = *newSrcType;
-            }
-        public: mlir::Type getTypeSource() const{
-                return srcType;
-            }
-    };
 }
 
 #endif // ADT_DIALECT_H_
diff --git a/lib/Adt/AdtDialect.cpp b/lib/Adt/AdtDialect.cpp
index fe3efeefe4b9a2bb1304b44e63f55fb1d4532872..c19f6960b3403b8c90539611e7869e15665fb1c9 100644
--- a/lib/Adt/AdtDialect.cpp
+++ b/lib/Adt/AdtDialect.cpp
@@ -1,51 +1,11 @@
+#include <cstdint>
 #include "Adt/AdtDialect.h"
+#include "Adt/AdtOps.h"
 #include "mlir/IR/DialectImplementation.h"
 #include "Adt/MemorySpecification.h"
-#include <cstdint>
-using namespace std;
-using namespace mlir;
-using namespace mlir::adt;
-
-/*namespace mlir::adt {
-    /// Cette classe represente le stockage interne des types sources
-    struct AdtTypeStorage : public mlir::TypeStorage {
-        using KeyTy = llvm::ArrayRef<mlir::Type>;
-        explicit AdtTypeStorage(llvm::ArrayRef<mlir::Type> elementTypes) : elementTypes(elementTypes) {}
-        llvm::ArrayRef<mlir::Type> elementTypes;
-        static llvm::hash_code hashKey(const KeyTy &key) {
-            return llvm::hash_value(key);
-        }
-        bool operator==(const KeyTy &key) const { return key == elementTypes; }
-
-        static KeyTy getKey(llvm::ArrayRef<mlir::Type> elementTypes) {
-            return KeyTy(elementTypes);
-        }
-        static AdtTypeStorage *construct(mlir::TypeStorageAllocator &allocator, const KeyTy &key) {
-            llvm::ArrayRef<mlir::Type> elementTypes = allocator.copyInto(key);
-            return new (allocator.allocate<AdtTypeStorage>())AdtTypeStorage(elementTypes);
-        }
-    };
-    /// On doit implémenter ici une instance du type type source (donc cette instance est un type aussi)
-}
-///
-
-AdtType AdtType::getType(llvm::ArrayRef<mlir::Type> elementTypes) {
-    assert(!elementTypes.empty() && "expected at least 1 element type");
-    mlir::MLIRContext *ctx = elementTypes.front().getContext();
-    return Base::get(ctx,elementTypes);
-}
-
-
-AdtType AdtType::getTag(llvm::ArrayRef<Tag> elementTypes){
-    assert(!elementTypes.empty() && "expected at least 1 element type");
-    SmallVector<Type,1> newElementTypes;
-    for (int i = 0; i < (int)elementTypes.size();i++){
-        Type newElementType = (Type) (elementTypes[i].getTypeSource());
-        newElementTypes.push_back(newElementType);
-    }
-    mlir::MLIRContext *ctx = newElementTypes.front().getContext();
-    return Base::get(ctx,newElementTypes);
-};*/
+//using namespace std;
+//using namespace mlir;
+//using namespace mlir::adt;
 
 // cf. https://mlir.llvm.org/docs/Tutorials/Toy/Ch-7/
 namespace mlir::adt {
@@ -80,7 +40,7 @@ namespace mlir::adt {
 
 class ErrorSrcType : public TypeSource {
     public:
-    mlir::MLIRContext* getMLIRContext() {
+    mlir::MLIRContext* getMLIRContext() override {
         return NULL; // YAY! segfaults incoming!
     }
 };
@@ -92,7 +52,7 @@ class ProductSrcType : public TypeSource {
 public:
     ProductSrcType(SmallVector<TypeSource> fieldTys) : _fieldTys(fieldTys) {}
 
-    mlir::MLIRContext* getMLIRContext() {
+    mlir::MLIRContext* getMLIRContext() override {
         if (_fieldTys.empty()) // too bad, let's hope someone else has a context
             return NULL;
         else
@@ -127,11 +87,11 @@ class BasicSrcType : public TypeSource{
 public:
     BasicSrcType(mlir::Type baseTy) : _baseTy(baseTy) {}
 
-    mlir::MLIRContext* getMLIRContext() {
+    mlir::MLIRContext* getMLIRContext() override {
         return _baseTy.getContext();
     }
     
-    static TypeSource parseType(::mlir::DialectAsmParser &parser){
+    static TypeSource parseType(::mlir::DialectAsmParser &parser) {
         SMLoc typeLoc = parser.getCurrentLocation();
         mlir::Type baseTy;
         if (parser.parseLess() || parser.parseType(baseTy) || parser.parseGreater()) {
@@ -151,7 +111,7 @@ class SumSrcType : public TypeSource{
 public:
     SumSrcType(SmallVector<Variant> variants) : _variants(variants) {}
 
-    mlir::MLIRContext* getMLIRContext() {
+    mlir::MLIRContext* getMLIRContext() override {
         if (_variants.empty()) // too bad, let's hope someone else has a context
             return NULL;
         else
@@ -212,7 +172,6 @@ TypeSource TypeSource::parseType(::mlir::DialectAsmParser &parser) {
 
 TypeMem TypeMem::parseType(::mlir::DialectAsmParser &parser){
     SMLoc typeLoc = parser.getCurrentLocation();
-    TypeMem typeMem;
     StringRef keyword;
     if (parser.parseKeyword(&keyword)) {
         parser.emitError(typeLoc, "error ");
@@ -262,8 +221,6 @@ TypeMem PtrMemType::parseType(::mlir::DialectAsmParser &parser) {
 mlir::Type AdtDialect::parseType(::mlir::DialectAsmParser &parser) const {
     StringRef keyword;
     SMLoc typeLoc = parser.getCurrentLocation();
-    TypeSource adtTypeSrc;
-    TypeMem adtTypeMem;
     llvm::errs() << "I am parsing a type!\n";
     if (parser.parseKeyword(&keyword) || parser.parseLess()) {
         parser.emitError(typeLoc, "error ");
@@ -271,7 +228,7 @@ mlir::Type AdtDialect::parseType(::mlir::DialectAsmParser &parser) const {
     }
     else if (keyword == "type") {
         llvm::errs() << "I saw the keyword 'type'.\n";
-        adtTypeSrc = TypeSource::parseType(parser);
+        TypeSource adtTypeSrc = TypeSource::parseType(parser);
         llvm::errs() << "I parsed a source type and didn't die.\n";
         if(parser.parseKeyword(&keyword) || keyword != "representedAs") {
             parser.emitError(typeLoc, "error ");
@@ -279,7 +236,7 @@ mlir::Type AdtDialect::parseType(::mlir::DialectAsmParser &parser) const {
         }
         else {
             llvm::errs() << "I am not complaining so far.\n";
-            adtTypeMem = TypeMem::parseType(parser);
+            TypeMem adtTypeMem = TypeMem::parseType(parser);
             llvm::errs() << "I parsed a memory type and didn't die.\n";
             AdtType ty = AdtType::get(parser.getContext(), adtTypeSrc, adtTypeMem);
             llvm::errs() << "I built an AdtType.\n";
@@ -305,7 +262,7 @@ void AdtDialect::printType(::mlir::Type type, ::mlir::DialectAsmPrinter &printer
 }
 
 void AdtDialect::initialize() {
-    //addOperations<>();
-    //addTypes<AdtType>();
+    addOperations<DummyOp>();
+    addTypes<AdtType>();
     llvm::errs() << "Initialized ADT dialect.\n";
 }