diff --git a/CMakeLists.txt b/CMakeLists.txt
index dd7be16..08ce949 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,16 +18,13 @@ set(CHECKBRUTE_SOURCES
     src/mainthread.cpp
     src/brutethread.cpp
     src/checksum.cpp
-    src/checksum_lib.cpp
     src/checksum_qt.cpp
 )
 
 set(CHECKBRUTE_HEADERS
     src/mainthread.h
     src/brutethread.h
-    src/checkbrute.h
     src/checksum.h
-    src/checksum_lib.h
     src/checksum_qt.h
 )
 
@@ -36,7 +33,6 @@ add_executable(checkbrute
     ${CHECKBRUTE_SOURCES}
 )
 
-target_compile_definitions(checkbrute PRIVATE "CHECKBRUTE_PLUGINS=\"${CMAKE_INSTALL_PREFIX}/share/checkbrute/plugins\"")
 target_link_libraries(checkbrute PRIVATE Qt5::Core)
 
 install(TARGETS checkbrute DESTINATION bin)
diff --git a/src/brutethread.cpp b/src/brutethread.cpp
index 46d3fb4..a821d2e 100644
--- a/src/brutethread.cpp
+++ b/src/brutethread.cpp
@@ -16,11 +16,10 @@
 * responsible for anything with use of the software, you are self responsible.
 *****************************************************************************/
 
-#include <QDebug>
 #include <QTextStream>
 #include "brutethread.h"
 
-brutethread::brutethread(const QByteArray &fileContent, quint64 length, quint64 begin, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch) : checksum_vector(checksum_vector), checksums(checksums), fileContent(fileContent), strictMatch(strictMatch), length(length), begin(begin) {}
+brutethread::brutethread(const QByteArray &fileContent, quint64 length, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch) : checksum_vector(checksum_vector), checksums(checksums), fileContent(fileContent), strictMatch(strictMatch), length(length) {}
 
 void brutethread::run()
 {
@@ -28,14 +27,14 @@ void brutethread::run()
     for (quint64 seek = 0; seek + length < size; seek++) {
         for (checksum *generator : checksum_vector) {
             const QByteArray content = fileContent.mid(seek, length);
-            const QByteArray generatedHash = generator->generateChecksum(content);
+            const QByteArray generatedHash = generator->generateChecksum(content).toHex();
             for (const QByteArray &hash : checksums) {
                 if (!strictMatch && generatedHash.left(hash.length()) == hash) {
-                    QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << begin+seek << " End " << begin+seek+length << Qt::endl;
+                    QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << seek << " End " << seek+length << Qt::endl;
                     emit matched();
                 }
                 else if (strictMatch && generatedHash.length() == hash.length() && generatedHash == hash) {
-                    QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << begin+seek << " End " << begin+seek+length << Qt::endl;
+                    QTextStream(stdout) << "MATCH: " << generator->formatName() << " Checksum " << hash << " Start " << seek << " End " << seek+length << Qt::endl;
                     emit matched();
                 }
             }
diff --git a/src/brutethread.h b/src/brutethread.h
index 5f15b8e..d011af9 100644
--- a/src/brutethread.h
+++ b/src/brutethread.h
@@ -33,7 +33,7 @@ class brutethread : public QThread
 {
     Q_OBJECT
 public:
-    explicit brutethread(const QByteArray &fileContent, quint64 length, quint64 begin, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch);
+    explicit brutethread(const QByteArray &fileContent, quint64 length, QVector<checksum*> checksum_vector, QVector<QByteArray> checksums, bool strictMatch);
     void run();
 
 private:
@@ -42,7 +42,6 @@ private:
     QByteArray fileContent;
     bool strictMatch;
     quint64 length;
-    quint64 begin;
 
 signals:
     void matched();
diff --git a/src/checkbrute.h b/src/checkbrute.h
deleted file mode 100644
index dbfb3bb..0000000
--- a/src/checkbrute.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*****************************************************************************
-* checkbrute Checksum Bruteforcing Tool
-* Copyright (C) 2020 Syping
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice,
-* this list of conditions and the following disclaimer.
-*
-* 2. 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.
-*
-* This software is provided as-is, no warranties are given to you, we are not
-* responsible for anything with use of the software, you are self responsible.
-*****************************************************************************/
-
-#ifndef CHECKBRUTE_H
-#define CHECKBRUTE_H
-
-#ifndef CHECKBRUTE_PLUGINS
-#define CHECKBRUTE_PLUGINS "/usr/local/share/checkbrute/plugins"
-#endif
-
-#endif // CHECKBRUTE_H
diff --git a/src/checksum_lib.cpp b/src/checksum_lib.cpp
deleted file mode 100644
index 9138767..0000000
--- a/src/checksum_lib.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************
-* checkbrute Checksum Bruteforcing Tool
-* Copyright (C) 2020 Syping
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice,
-* this list of conditions and the following disclaimer.
-*
-* 2. 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.
-*
-* This software is provided as-is, no warranties are given to you, we are not
-* responsible for anything with use of the software, you are self responsible.
-*****************************************************************************/
-
-#include "checksum_lib.h"
-#include <iostream>
-#include <cstdint>
-#include <cstring>
-
-checksum_lib::checksum_lib(PluginFormatFunction formatFunc, PluginHash32Function hash32Func, PluginHashSzFunction hashSzFunc) : hash32Func(hash32Func)
-{
-    p_formatName = QString::fromUtf8(formatFunc());
-    p_checksumSize = hashSzFunc();
-    p_funcBit = 32;
-}
-
-checksum_lib::checksum_lib(PluginFormatFunction formatFunc, PluginHash64Function hash64Func, PluginHashSzFunction hashSzFunc) : hash64Func(hash64Func)
-{
-    p_formatName = QString::fromUtf8(formatFunc());
-    p_checksumSize = hashSzFunc();
-    p_funcBit = 64;
-}
-
-QByteArray checksum_lib::generateChecksum(const QByteArray &data)
-{
-    const size_t size = data.size();
-    unsigned char *udata = new unsigned char[size];
-    std::memcpy(udata, data.constData(), size);
-    if (p_funcBit == 32) {
-        const u_int32_t hash = hash32Func(udata, size);
-        free(udata);
-        return QByteArray::number((quint32)hash, 16);
-    }
-    else {
-        const u_int64_t hash = hash64Func(udata, size);
-        free(udata);
-        return QByteArray::number((quint64)hash, 16);
-    }
-}
-
-const QString checksum_lib::formatName()
-{
-    return p_formatName;
-}
-
-int checksum_lib::checksumSize()
-{
-    return p_checksumSize;
-}
diff --git a/src/checksum_lib.h b/src/checksum_lib.h
deleted file mode 100644
index f706c2c..0000000
--- a/src/checksum_lib.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*****************************************************************************
-* checkbrute Checksum Bruteforcing Tool
-* Copyright (C) 2020 Syping
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice,
-* this list of conditions and the following disclaimer.
-*
-* 2. 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.
-*
-* This software is provided as-is, no warranties are given to you, we are not
-* responsible for anything with use of the software, you are self responsible.
-*****************************************************************************/
-
-#ifndef CHECKSUM_LIB_H
-#define CHECKSUM_LIB_H
-
-#include "checksum.h"
-
-typedef int (*PluginHashSzFunction)();
-typedef const char* (*PluginFormatFunction)();
-typedef const char* (*PluginVersionFunction)();
-typedef u_int32_t (*PluginHash32Function)(unsigned char*, size_t);
-typedef u_int64_t (*PluginHash64Function)(unsigned char*, size_t);
-
-class checksum_lib : public checksum
-{
-    Q_OBJECT
-public:
-    explicit checksum_lib(PluginFormatFunction formatFunc, PluginHash32Function hash32Func, PluginHashSzFunction hashSzFunc);
-    explicit checksum_lib(PluginFormatFunction formatFunc, PluginHash64Function hash64Func, PluginHashSzFunction hashSzFunc);
-    QByteArray generateChecksum(const QByteArray &data);
-    const QString formatName();
-    int checksumSize();
-
-private:
-    PluginHash32Function hash32Func;
-    PluginHash64Function hash64Func;
-    QString p_formatName;
-    int p_checksumSize;
-    int p_funcBit;
-};
-
-#endif // CHECKSUM_LIB_H
diff --git a/src/checksum_qt.cpp b/src/checksum_qt.cpp
index fdcd560..7c69284 100644
--- a/src/checksum_qt.cpp
+++ b/src/checksum_qt.cpp
@@ -23,7 +23,7 @@ checksum_qt::checksum_qt(QCryptographicHash::Algorithm algorithm, const QString
 
 QByteArray checksum_qt::generateChecksum(const QByteArray &data)
 {
-    return QCryptographicHash::hash(data, algorithm).toHex();
+    return QCryptographicHash::hash(data, algorithm);
 }
 
 const QString checksum_qt::formatName()
diff --git a/src/checksum_qt.h b/src/checksum_qt.h
index 3fdd03c..95a58f0 100644
--- a/src/checksum_qt.h
+++ b/src/checksum_qt.h
@@ -36,4 +36,4 @@ private:
     QString name;
 };
 
-#endif // CHECKSUM_QT5_H
+#endif // CHECKSUM_MD5_H
diff --git a/src/main.cpp b/src/main.cpp
index c7194c3..a85a050 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -22,21 +22,17 @@
 #include <QCoreApplication>
 #include <QTextStream>
 #include <QFileInfo>
-#include <QLibrary>
 #include <QThread>
-#include <QDir>
 
 // checkbrute includes
 #include "mainthread.h"
-#include "checkbrute.h"
 #include "checksum_qt.h"
-#include "checksum_lib.h"
 
 int main(int argc, char *argv[])
 {
     QCoreApplication a(argc, argv);
     a.setApplicationName("checkbrute");
-    a.setApplicationVersion("0.3.3");
+    a.setApplicationVersion("0.1.1");
 
     QCommandLineParser commandLineParser;
     commandLineParser.addHelpOption();
@@ -49,8 +45,7 @@ int main(int argc, char *argv[])
     QCommandLineOption lengthsOption = QCommandLineOption("lengths", "Lengths to use for bruteforcing.", "lengths");
     QCommandLineOption threadsOption = QCommandLineOption("threads", "Threads to use for bruteforcing.", "threads");
     QCommandLineOption strictOption = QCommandLineOption(QStringList() << "s" << "strict", "Match checksums strict.");
-    QCommandLineOption testOption = QCommandLineOption(QStringList() << "t" << "test", "Test checkbrute plugin hashes.");
-    commandLineParser.addOptions(QList<QCommandLineOption>() << algorithmsOption << startOption << stopOption << lengthsOption << threadsOption << strictOption << testOption);
+    commandLineParser.addOptions(QList<QCommandLineOption>() << algorithmsOption << startOption << stopOption << lengthsOption << threadsOption << strictOption);
     commandLineParser.process(a);
 
     QTextStream(stderr) << "INFO: Launch " << a.applicationName() << " " << a.applicationVersion() << "..." << Qt::endl;
@@ -63,7 +58,6 @@ int main(int argc, char *argv[])
     const QString bruteforceFile = args.at(0);
     const QString checksumsFile = args.at(1);
     const bool strictHash = commandLineParser.isSet(strictOption);
-    const bool testEnabled = commandLineParser.isSet(testOption);
 
     if (strictHash) {
         QTextStream(stderr) << "INFO: Strict matching enabled" << Qt::endl;
@@ -91,11 +85,11 @@ int main(int argc, char *argv[])
     std::map<std::string,checksum*> checksum_map;
     checksum_map["MD4"] = new checksum_qt(QCryptographicHash::Md4, "MD4");
     checksum_map["MD5"] = new checksum_qt(QCryptographicHash::Md5, "MD5");
-    checksum_map["SHA-1"] = new checksum_qt(QCryptographicHash::Sha1, "SHA-1");
-    checksum_map["SHA-224"] = new checksum_qt(QCryptographicHash::Sha224, "SHA-224");
-    checksum_map["SHA-256"] = new checksum_qt(QCryptographicHash::Sha256, "SHA-256");
-    checksum_map["SHA-384"] = new checksum_qt(QCryptographicHash::Sha384, "SHA-384");
-    checksum_map["SHA-512"] = new checksum_qt(QCryptographicHash::Sha512, "SHA-512");
+    checksum_map["SHA1"] = new checksum_qt(QCryptographicHash::Sha1, "SHA1");
+    checksum_map["SHA2-224"] = new checksum_qt(QCryptographicHash::Sha224, "SHA2-224");
+    checksum_map["SHA2-256"] = new checksum_qt(QCryptographicHash::Sha256, "SHA2-256");
+    checksum_map["SHA2-384"] = new checksum_qt(QCryptographicHash::Sha384, "SHA2-384");
+    checksum_map["SHA2-512"] = new checksum_qt(QCryptographicHash::Sha512, "SHA2-512");
     checksum_map["SHA3-224"] = new checksum_qt(QCryptographicHash::Sha3_224, "SHA3-224");
     checksum_map["SHA3-256"] = new checksum_qt(QCryptographicHash::Sha3_256, "SHA3-256");
     checksum_map["SHA3-384"] = new checksum_qt(QCryptographicHash::Sha3_384, "SHA3-384");
@@ -107,47 +101,6 @@ int main(int argc, char *argv[])
     checksum_map["Keccak-512"] = new checksum_qt(QCryptographicHash::Keccak_512, "Keccak-512");
 #endif
 
-    for (const QString &fileName : QDir(CHECKBRUTE_PLUGINS).entryList(QDir::Files, QDir::Name)) {
-        const QString filePath = QString("%1/%2").arg(CHECKBRUTE_PLUGINS, fileName);
-        if (QLibrary::isLibrary(filePath)) {
-            QTextStream(stderr) << "INFO: Load plugin " << fileName << "..." << Qt::endl;
-            QLibrary plugin(filePath);
-            if (plugin.load()) {
-                PluginHash32Function hash32Func = (PluginHash32Function)plugin.resolve("checkbrute_hash32");
-                PluginHash64Function hash64Func = (PluginHash64Function)plugin.resolve("checkbrute_hash64");
-                PluginHashSzFunction hashSzFunc = (PluginHashSzFunction)plugin.resolve("checkbrute_hashsz");
-                PluginFormatFunction formatFunc = (PluginFormatFunction)plugin.resolve("checkbrute_format");
-                PluginVersionFunction versionFunc = (PluginVersionFunction)plugin.resolve("checkbrute_version");
-                if (formatFunc && hash32Func && hashSzFunc) {
-                    QString version = "undefined";
-                    const char *format = formatFunc();
-                    if (versionFunc)
-                        version = QString::fromUtf8(versionFunc());
-                    checksum_map[format] = new checksum_lib(formatFunc, hash32Func, hashSzFunc);
-                    QTextStream(stderr) << "INFO: " << format << " plugin " << fileName << " loaded" << Qt::endl;
-                    if (testEnabled)
-                        QTextStream(stderr) << "TEST: " << format << " checkbrute -> " << QString::number(hash32Func((unsigned char*)"checkbrute", 7), 16) << Qt::endl;
-                }
-                else if (formatFunc && hash64Func && hashSzFunc) {
-                    QString version = "undefined";
-                    const char *format = formatFunc();
-                    if (versionFunc)
-                        version = QString::fromUtf8(versionFunc());
-                    checksum_map[format] = new checksum_lib(formatFunc, hash64Func, hashSzFunc);
-                    QTextStream(stderr) << "INFO: " << format << " plugin " << fileName << " loaded" << Qt::endl;
-                    if (testEnabled)
-                        QTextStream(stderr) << "TEST: " << format << " checkbrute -> " << QString::number(hash64Func((unsigned char*)"checkbrute", 7), 16) << Qt::endl;
-                }
-                else {
-                    QTextStream(stderr) << "WARNING: Failed loading plugin " << fileName << "!" << Qt::endl;
-                }
-            }
-            else {
-                QTextStream(stderr) << "WARNING: Failed loading plugin " << fileName << "!" << Qt::endl;
-            }
-        }
-    }
-
     mainthread instance(bruteforceFile, checksumsFile, algorithms, start, stop, lengths, threads, strictHash, checksum_map);
     QObject::connect(&instance, &mainthread::finished, &a, &QCoreApplication::quit);
     if (!instance.isInitialised())
diff --git a/src/mainthread.cpp b/src/mainthread.cpp
index 6a54fee..5209d38 100644
--- a/src/mainthread.cpp
+++ b/src/mainthread.cpp
@@ -142,10 +142,9 @@ mainthread::mainthread(const QString &bruteforceFile, const QString &checksumsFi
     }
 
     // Clear unneeded bytes
-    if (begin != 0 || end != (quint64)fileContent.size()) {
+    if (begin != 0 && end != (quint64)fileContent.size()) {
         fileContent = fileContent.mid(begin, end - begin);
         fileContent.squeeze();
-        QTextStream(stderr) << "INFO: Bruteforce Start " << begin << " End " << end << Qt::endl;
     }
 
     if (!lenghts_str.isEmpty()) {
@@ -268,7 +267,7 @@ void mainthread::run()
             if (threads >= mthreads)
                 eventLoop.exec();
             QTextStream(stderr) << "[" << std::distance(lengths.constBegin(), it) + 1 << "/" << lengthsCount << "] [" << min << "/" << max << "] Bruteforcing...\r";
-            brutethread *thread = new brutethread(fileContent, min, begin, checksum_vector, checksums, strictHash);
+            brutethread *thread = new brutethread(fileContent, min, checksum_vector, checksums, strictHash);
             QObject::connect(thread, &QThread::finished, this, &mainthread::threadFinished);
             QObject::connect(thread, &brutethread::matched, this, &mainthread::matched);
             thread->start(QThread::LowPriority);
@@ -279,7 +278,7 @@ void mainthread::run()
                 if (threads >= mthreads)
                     eventLoop.exec();
                 QTextStream(stderr) << "[" << std::distance(lengths.constBegin(), it) + 1 << "/" << lengthsCount << "] [" << clength << "/" << max << "] Bruteforcing...\r";
-                brutethread *thread = new brutethread(fileContent, clength, begin, checksum_vector, checksums, strictHash);
+                brutethread *thread = new brutethread(fileContent, clength, checksum_vector, checksums, strictHash);
                 QObject::connect(thread, &QThread::finished, this, &mainthread::threadFinished);
                 QObject::connect(thread, &brutethread::matched, this, &mainthread::matched);
                 thread->start(QThread::LowPriority);
@@ -291,7 +290,7 @@ void mainthread::run()
                 if (threads >= mthreads)
                     eventLoop.exec();
                 QTextStream(stderr) << "[" << std::distance(lengths.constBegin(), it) + 1 << "/" << lengthsCount << "] [" << clength << "/" << max << "] Bruteforcing...\r";
-                brutethread *thread = new brutethread(fileContent, clength, begin, checksum_vector, checksums, strictHash);
+                brutethread *thread = new brutethread(fileContent, clength, checksum_vector, checksums, strictHash);
                 QObject::connect(thread, &QThread::finished, this, &mainthread::threadFinished);
                 QObject::connect(thread, &brutethread::matched, this, &mainthread::matched);
                 thread->start(QThread::LowPriority);