diff --git a/dist/beamer-slider-0.0.1.tar.gz b/dist/beamer-slider-0.0.1.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..a26945b2d39023b8d9ed19da09975b97ca46c2ef
Binary files /dev/null and b/dist/beamer-slider-0.0.1.tar.gz differ
diff --git a/dist/beamer-slider-0.0.2.tar.gz b/dist/beamer-slider-0.0.2.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..9d9de025e1ace90f2311c9c8c61c470313bf07ff
Binary files /dev/null and b/dist/beamer-slider-0.0.2.tar.gz differ
diff --git a/dist/beamer-slider-0.1.0.tar.gz b/dist/beamer-slider-0.1.0.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..40da5b47506b6307af6bbf651e13de2b60f20102
Binary files /dev/null and b/dist/beamer-slider-0.1.0.tar.gz differ
diff --git a/dist/beamer_slider-0.0.1-py3-none-any.whl b/dist/beamer_slider-0.0.1-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..ef122db6efc3aac165213fb06b33f4bb086f2e45
Binary files /dev/null and b/dist/beamer_slider-0.0.1-py3-none-any.whl differ
diff --git a/dist/beamer_slider-0.0.2-py3-none-any.whl b/dist/beamer_slider-0.0.2-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..0604d04045a24f8f47236a17f450547931a20d48
Binary files /dev/null and b/dist/beamer_slider-0.0.2-py3-none-any.whl differ
diff --git a/dist/beamer_slider-0.1.0-py3-none-any.whl b/dist/beamer_slider-0.1.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..a532586d2e0aadeb4a1b0ff37c5ea53e7cbf2a0e
Binary files /dev/null and b/dist/beamer_slider-0.1.0-py3-none-any.whl differ
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7e386127967d6f5ae0c9be2e433e6b542061de6b
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,10 @@
+Jinja2
+numpy
+chardet
+scipy
+seaborn
+lxml
+matplotlib
+pylatexenc
+beautifulsoup4
+PyPDF2
diff --git a/setup.py b/setup.py
index 0076be64071cdafef02c2781ce15af8de75b86af..b8c5aadc798e7f904f8e1f592f06dd58ff4d2ff3 100644
--- a/setup.py
+++ b/setup.py
@@ -1,14 +1,17 @@
 # Use this guide:
+# Use:  pipreqs.exe slider --no-pin --force for requirements.txt
 # https://packaging.python.org/tutorials/packaging-projects/
+# py -m build && twine upload dist/*
 
 import setuptools
-
+import pkg_resources
 with open("README.md", "r", encoding="utf-8") as fh:
     long_description = fh.read()
 
+
 setuptools.setup(
     name="beamer-slider",
-    version="0.0.1",
+    version="0.1.0",
     author="Tue Herlau",
     author_email="tuhe@dtu.dk",
     description="Software to create inkscape overlays in Beamer",
@@ -27,5 +30,5 @@ setuptools.setup(
     package_dir={"": "src"},
     packages=setuptools.find_packages(where="src"),
     python_requires=">=3.8",
-    install_requires=['jinja2', 'numpy', 'scipy', 'bs4', 'lxml', 'codecs', 'optparse', 'PyPDF2', 'pickle'],
+    install_requires=[str(r) for r in pkg_resources.parse_requirements('requirements.txt')],
 )
diff --git a/src/beamer_slider.egg-info/PKG-INFO b/src/beamer_slider.egg-info/PKG-INFO
new file mode 100644
index 0000000000000000000000000000000000000000..9d993a88b002af0f99d156a00d9b19811547b432
--- /dev/null
+++ b/src/beamer_slider.egg-info/PKG-INFO
@@ -0,0 +1,22 @@
+Metadata-Version: 2.1
+Name: beamer-slider
+Version: 0.1.0
+Summary: Software to create inkscape overlays in Beamer
+Home-page: https://lab.compute.dtu.dk/tuhe/slider
+Author: Tue Herlau
+Author-email: tuhe@dtu.dk
+License: MIT
+Project-URL: Bug Tracker, https://lab.compute.dtu.dk/tuhe/slider/issues
+Platform: UNKNOWN
+Classifier: Programming Language :: Python :: 3
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: OS Independent
+Requires-Python: >=3.8
+Description-Content-Type: text/markdown
+License-File: LICENSE
+
+# Slider
+
+Slide overlay software based on beamer and inkscape. This project is currently used in coursebox. 
+The software also offers a package for jinja2 (jinjafy) which offers a handful of convenient extensions.
+
diff --git a/src/beamer_slider.egg-info/SOURCES.txt b/src/beamer_slider.egg-info/SOURCES.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d98979d74d33838738f8a66fa9cbed4b6060c1e4
--- /dev/null
+++ b/src/beamer_slider.egg-info/SOURCES.txt
@@ -0,0 +1,27 @@
+LICENSE
+README.md
+pyproject.toml
+setup.py
+src/beamer_slider.egg-info/PKG-INFO
+src/beamer_slider.egg-info/SOURCES.txt
+src/beamer_slider.egg-info/dependency_links.txt
+src/beamer_slider.egg-info/requires.txt
+src/beamer_slider.egg-info/top_level.txt
+src/jinjafy/__init__.py
+src/jinjafy/jinja_env.py
+src/jinjafy/jinja_matlab_load.py
+src/jinjafy/jinjafy.py
+src/jinjafy/snipper.py
+src/jinjafy/textools.py
+src/jinjafy/cache/__init__.py
+src/jinjafy/cache/simplecache.py
+src/jinjafy/plot/__init__.py
+src/jinjafy/plot/plot_helpers.py
+src/slider/__init__.py
+src/slider/convert.py
+src/slider/inkscape2scenes.py
+src/slider/latexutils.py
+src/slider/legacy_importer.py
+src/slider/slide_fixer.py
+src/slider/slider.py
+src/slider/svg2latex.py
\ No newline at end of file
diff --git a/src/beamer_slider.egg-info/dependency_links.txt b/src/beamer_slider.egg-info/dependency_links.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/src/beamer_slider.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/src/beamer_slider.egg-info/requires.txt b/src/beamer_slider.egg-info/requires.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4414fc1e28fae46b363ba747b7a921479d85ab62
--- /dev/null
+++ b/src/beamer_slider.egg-info/requires.txt
@@ -0,0 +1 @@
+requirements.txt
diff --git a/src/beamer_slider.egg-info/top_level.txt b/src/beamer_slider.egg-info/top_level.txt
new file mode 100644
index 0000000000000000000000000000000000000000..273f1c300b0dce2499a9fa2d865445e81c0c4fa2
--- /dev/null
+++ b/src/beamer_slider.egg-info/top_level.txt
@@ -0,0 +1,2 @@
+jinjafy
+slider
diff --git a/src/jinjafy/__init__.py b/src/jinjafy/__init__.py
index 8a00d8cd422222546dfd99ba2f052660bc562784..0bebe70d96db3874f2f97a22a611728675673f86 100644
--- a/src/jinjafy/__init__.py
+++ b/src/jinjafy/__init__.py
@@ -1,10 +1,27 @@
 from jinjafy.jinjafy import jinjafy_comment
 from jinjafy.jinjafy import jinjafy_template
 from jinjafy.jinja_matlab_load import matlab_load
+# from slider import latexmk
 from jinjafy.textools import mat2table
 import subprocess
+# import os
+import platform
 # from subprocess import subprocess
 
+
+def execute_command(command, shell=True):
+    if not isinstance(command, list):
+        command = [command]
+    if not platform.uname()[0] == "Linux":
+        result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell)
+        out = result.stdout
+    else:
+        out = subprocess.check_output(command, shell=shell)
+    s = out.decode("utf-8")
+    OK = True
+    return s, OK
+
+
 # def get_system_name():
 #     if is_win():
 #         return "Win"
@@ -13,14 +30,14 @@ import subprocess
 #     if is_cogsys_cluster():
 #         return "cogys cluster"
 
-def execute_command(command, shell=True):
-    if not isinstance(command, list):
-        command = [command]
-    # if not is_compute():
-    # result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell)
-    # out = result.stdout
-    # else:
-    out = subprocess.check_output(command, shell=shell)
-    s = out.decode("utf-8")
-    OK = True
-    return s, OK
\ No newline at end of file
+# def execute_command(command, shell=True):
+#     if not isinstance(command, list):
+#         command = [command]
+#     # if not is_compute():
+#     # result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell)
+#     # out = result.stdout
+#     # else:
+#     out = subprocess.check_output(command, shell=shell)
+#     s = out.decode("utf-8")
+#     OK = True
+#     return s, OK
\ No newline at end of file
diff --git a/src/jinjafy/__pycache__/__init__.cpython-38.pyc b/src/jinjafy/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0aa62904b022a971a4e69a831ea2f483d3806192
Binary files /dev/null and b/src/jinjafy/__pycache__/__init__.cpython-38.pyc differ
diff --git a/src/jinjafy/__pycache__/jinja_env.cpython-38.pyc b/src/jinjafy/__pycache__/jinja_env.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..abf04b662946eb74d0837b4824f18ea4275dfd62
Binary files /dev/null and b/src/jinjafy/__pycache__/jinja_env.cpython-38.pyc differ
diff --git a/src/jinjafy/__pycache__/jinja_matlab_load.cpython-38.pyc b/src/jinjafy/__pycache__/jinja_matlab_load.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..157360969681cc1d500f4aa235a1f5254de5c558
Binary files /dev/null and b/src/jinjafy/__pycache__/jinja_matlab_load.cpython-38.pyc differ
diff --git a/src/jinjafy/__pycache__/jinjafy.cpython-38.pyc b/src/jinjafy/__pycache__/jinjafy.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..69ae6f69b71541c147ea92712ef1db62f57045d5
Binary files /dev/null and b/src/jinjafy/__pycache__/jinjafy.cpython-38.pyc differ
diff --git a/src/jinjafy/__pycache__/snipper.cpython-38.pyc b/src/jinjafy/__pycache__/snipper.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ff0f2bbe8e5ba452727dc54fbaad57942fa0ffe2
Binary files /dev/null and b/src/jinjafy/__pycache__/snipper.cpython-38.pyc differ
diff --git a/src/jinjafy/__pycache__/textools.cpython-38.pyc b/src/jinjafy/__pycache__/textools.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8c949cc592b364bf5fb79452fba9ba7d07aa0b78
Binary files /dev/null and b/src/jinjafy/__pycache__/textools.cpython-38.pyc differ
diff --git a/src/jinjafy/cache/__init__.py b/src/jinjafy/cache/__init__.py
index a2e522c2f3baf4762462cd8dac312e446a3e4323..a46ef35f71399ee0932c8d376af74af0682a8e6c 100644
--- a/src/jinjafy/cache/__init__.py
+++ b/src/jinjafy/cache/__init__.py
@@ -1,8 +1,8 @@
-from thtools.cache.simplecache import cache_update_str as cache_update_str
-from thtools.cache.simplecache import cache_contains_str as cache_contains_str
+from jinjafy.cache.simplecache import cache_update_str as cache_update_str
+from jinjafy.cache.simplecache import cache_contains_str as cache_contains_str
 
-from thtools.cache.simplecache import cache_update_file as cache_update_file
-from thtools.cache.simplecache import cache_contains_file as cache_contains_file
+from jinjafy.cache.simplecache import cache_update_file as cache_update_file
+from jinjafy.cache.simplecache import cache_contains_file as cache_contains_file
 
-from thtools.cache.simplecache import cache_update_dir as cache_update_dir
-from thtools.cache.simplecache import cache_contains_dir as cache_contains_dir
\ No newline at end of file
+from jinjafy.cache.simplecache import cache_update_dir as cache_update_dir
+from jinjafy.cache.simplecache import cache_contains_dir as cache_contains_dir
\ No newline at end of file
diff --git a/src/jinjafy/cache/__pycache__/__init__.cpython-38.pyc b/src/jinjafy/cache/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..73befe4e95c0381fe5c48253a0b38fb976319457
Binary files /dev/null and b/src/jinjafy/cache/__pycache__/__init__.cpython-38.pyc differ
diff --git a/src/jinjafy/cache/__pycache__/simplecache.cpython-38.pyc b/src/jinjafy/cache/__pycache__/simplecache.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ada4ff733185c3c008d0174a69e0a240c9114445
Binary files /dev/null and b/src/jinjafy/cache/__pycache__/simplecache.cpython-38.pyc differ
diff --git a/src/jinjafy/jinjafy.py b/src/jinjafy/jinjafy.py
index 4eee3d35cfeeb307daf3016d8dc24fbe5dcbf391..43da4a7568b76ee8e1d479026bb4f2b032cf5e3f 100644
--- a/src/jinjafy/jinjafy.py
+++ b/src/jinjafy/jinjafy.py
@@ -42,7 +42,7 @@ def jinjafy_comment(data,file_in=None,file_out=None,jinja_tag="jinja",jinja_code
 
             jinja_code = '\n'.join(ss)
 
-    from thtools.jinjafy.snipper import SnipperExtension
+    from jinjafy.snipper import SnipperExtension
     extensions = [SnipperExtension]
     if template_searchpath:
         if not isinstance(template_searchpath, list):
@@ -70,10 +70,9 @@ def jinjafy_comment(data,file_in=None,file_out=None,jinja_tag="jinja",jinja_code
     env.globals['ceil'] = math.ceil
     env.globals['floor'] = math.floor
 
-    import thtools
-    if not thtools.is_cluster():
-        from pylatexenc import latexencode
-        env.globals['utf8tolatex'] = latexencode.utf8tolatex
+
+    from pylatexenc import latexencode
+    env.globals['utf8tolatex'] = latexencode.utf8tolatex
     env.globals['as_set'] = jinja_env.as_set
     env.globals['as_set_list'] = jinja_env.as_set_list
     env.globals['len'] = jinja_env.mylen
diff --git a/src/jinjafy/plot/__init__.py b/src/jinjafy/plot/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d2254a59f55bb578875e2f0e81c6aa4264e14025
--- /dev/null
+++ b/src/jinjafy/plot/__init__.py
@@ -0,0 +1 @@
+# from thtools.plot.plot_helpers import *
diff --git a/src/jinjafy/plot/plot_helpers.py b/src/jinjafy/plot/plot_helpers.py
new file mode 100644
index 0000000000000000000000000000000000000000..594e7182f50c536f1b6c5b7d8542f631325b1425
--- /dev/null
+++ b/src/jinjafy/plot/plot_helpers.py
@@ -0,0 +1,48 @@
+import matplotlib.pyplot as plt
+import numpy as np
+import seaborn as sns
+import inspect
+import os
+from datetime import datetime
+
+def subplots(nrows=2, ncols=2, size_inches=(10,12), *args):
+    fig,axx = plt.subplots(nrows, ncols, *args)
+    fig.set_size_inches(size_inches[0], size_inches[1])
+    if not isinstance(axx, list):
+        axx = np.asarray(axx, dtype=np.object).reshape((nrows, ncols))
+    return fig, axx
+
+def get_colors(palette="dark",max_colors=5):
+    return sns.color_palette(palette, max_colors)
+
+
+def watermark_plot(extra="", nback=2, fz_y=10):
+    # from slider.thtools_base import watermark_string
+    s = watermark_string(nback=nback)
+    plt.figtext(0.05, 0.95, s)
+
+
+
+def watermark_string(nback=2):
+
+
+    tm =  datetime.now().strftime('%b-%d-%I:%M%p')
+    # for line in traceback.format_stack():
+    #     #     print(line.strip())
+    v = inspect.stack()
+    ss = []
+    j = 0
+    for i in range(len(v)):
+        if "plot_helpers.py" in v[i].filename: continue
+        ss.append( os.path.basename( v[i].filename) )
+        j = j + 1
+        if j > nback: break
+    # from thtools import execute_command
+    from jinjafy import execute_command
+    v, _ = execute_command("git rev-parse --short HEAD".split())
+
+    ss.append(tm)
+    return ('/'.join(ss) + f" @{v}").strip()
+
+
+
diff --git a/src/jinjafy/snipper.py b/src/jinjafy/snipper.py
index a0f8fd02f8517cb2f204446426914a6778f38d40..ad55d29ae0dcc9746768c017852d129e98ed5d3c 100644
--- a/src/jinjafy/snipper.py
+++ b/src/jinjafy/snipper.py
@@ -1,7 +1,6 @@
 from jinja2 import nodes
 from jinja2.ext import Extension
 import os
-import thtools
 
 
 class SnipperExtension(Extension):
@@ -29,7 +28,8 @@ class SnipperExtension(Extension):
         args = [parser.parse_expression()]
         ofile = os.path.join(os.path.dirname(parser.filename), args[0].value)
         args[0].value = ofile
-        thtools.ensure_dir_exists(os.path.dirname(ofile))
+        if not os.path.isdir(os.path.dirname(ofile)):
+            os.makedirs(os.path.dirname(ofile))
         self.ofile = ofile
         print("Snipper args", args, "ofile", ofile)
 
@@ -50,7 +50,6 @@ class SnipperExtension(Extension):
                                 [], [], body).set_lineno(lineno)
 
         # parser.environment.loader.searchpath
-
         # parser.parse_statements(body)
         return body
 
diff --git a/src/jinjafy/textools.py b/src/jinjafy/textools.py
index 662f393640a5140d3c6c2837ce0773a45f528e31..511932d118708e006a70e908b681fd50643a8647 100644
--- a/src/jinjafy/textools.py
+++ b/src/jinjafy/textools.py
@@ -97,7 +97,7 @@ def mat2table(X,vlabels=None,hlabels=None,file_out = None, bookstabs=True, vvlab
     data = {'X' : Xdl, 'hlabels': hlabels, 'vlabels': vlabels, 'cc': cc, 'H':H, 'W': W, 'bookstabs': bookstabs,
             'vvlabels': vvlabels}
 
-    from thtools.jinjafy.jinjafy import jinjafy_comment
+    from jinjafy.jinjafy import jinjafy_comment
     s = jinjafy_comment(data,jinja_tag="jinja1")
     if file_out:
         print("Writing to: " + file_out)
@@ -108,9 +108,9 @@ def mat2table(X,vlabels=None,hlabels=None,file_out = None, bookstabs=True, vvlab
         with open(file_out, 'w') as f:
             f.write(s)
         if standalone:
-            from thtools import latexmk
-            latexmk(file_out)
 
+            from slider import latexmk
+            latexmk(file_out)
 
 
     return s
diff --git a/src/slider/__init__.py b/src/slider/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..582dc9b79c90f89e8951081d141e0b9a06ac6a03 100644
--- a/src/slider/__init__.py
+++ b/src/slider/__init__.py
@@ -0,0 +1,2 @@
+from jinjafy import execute_command
+from slider.latexutils import latexmk
\ No newline at end of file
diff --git a/src/slider/__pycache__/__init__.cpython-38.pyc b/src/slider/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ef231a76c8e59798ab8a631008afd57c6bcc4fb6
Binary files /dev/null and b/src/slider/__pycache__/__init__.cpython-38.pyc differ
diff --git a/src/slider/__pycache__/convert.cpython-38.pyc b/src/slider/__pycache__/convert.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..45d23d8da3bfcaa6d9b30ca2ab0bab2ed1071101
Binary files /dev/null and b/src/slider/__pycache__/convert.cpython-38.pyc differ
diff --git a/src/slider/__pycache__/latexutils.cpython-38.pyc b/src/slider/__pycache__/latexutils.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5a5dd789246d93e5df66674bfc1fc77f67d267ee
Binary files /dev/null and b/src/slider/__pycache__/latexutils.cpython-38.pyc differ
diff --git a/src/slider/__pycache__/legacy_importer.cpython-38.pyc b/src/slider/__pycache__/legacy_importer.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2c9228bc8a3b9e6c388337b7fc8f467bf280708f
Binary files /dev/null and b/src/slider/__pycache__/legacy_importer.cpython-38.pyc differ
diff --git a/src/slider/__pycache__/slide_fixer.cpython-38.pyc b/src/slider/__pycache__/slide_fixer.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..031a0af180836a3d1c58377ffe25d34357aea653
Binary files /dev/null and b/src/slider/__pycache__/slide_fixer.cpython-38.pyc differ
diff --git a/src/slider/__pycache__/slider.cpython-38.pyc b/src/slider/__pycache__/slider.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8c8fa597a455a2d4d0bc1ac9cdf0ac34509d8380
Binary files /dev/null and b/src/slider/__pycache__/slider.cpython-38.pyc differ
diff --git a/src/slider/convert.py b/src/slider/convert.py
index f4b00969f75d835da5715ac9487e5b1bc7a33d74..3c2518c8e1e7e93ed753df77d0632c121d1abca6 100644
--- a/src/slider/convert.py
+++ b/src/slider/convert.py
@@ -1,7 +1,6 @@
 from jinjafy import execute_command
 import os
 from bs4 import BeautifulSoup
-# import thtools
 
 def svg2pdf(fin, fout=None, crop=True, text_to_path=False, export_area_page=True):
     """
diff --git a/src/slider/latexutils.py b/src/slider/latexutils.py
new file mode 100644
index 0000000000000000000000000000000000000000..2e50e0978da7c792fd2d44a35209b4afdc3e7d71
--- /dev/null
+++ b/src/slider/latexutils.py
@@ -0,0 +1,36 @@
+from jinjafy import execute_command
+import os
+import shutil
+
+def latexmk(texfile,pdf_out=None,shell=True,cleanup=False, Linux=False):
+    cdir = os.getcwd()
+    dname = os.path.dirname(texfile)
+    os.chdir(dname)
+    texfile = os.path.basename(texfile)
+    if Linux:
+        CMD = "latexmk -f -g -pdf -interaction=nonstopmode " + texfile
+        print("Running LaTeX command>> " + CMD)
+        s = execute_command(CMD.split(" "), shell=shell)
+    else:
+        CMD = "latexmk -f -g -pdf -shell-escape -interaction=nonstopmode " + texfile
+        print("Running LaTeX command>> " + CMD)
+        s = execute_command(CMD.split(" "),shell=shell)
+
+    if pdf_out:
+        shutil.copyfile(texfile[:-4]+".pdf", pdf_out)
+    else:
+        pdf_out = os.path.join(os.path.dirname(texfile), texfile[:-4]+".pdf")
+
+    if cleanup and os.path.exists(pdf_out):
+        bft = ['bbl', 'blg', 'fdb_latexmk', 'fls', 'aux', 'synctex.gz', 'log']
+        for ex in bft:
+            import glob
+            fl = glob.glob(dname + "/*."+ex)
+            for f in fl:
+                os.remove(f)
+
+    os.chdir(cdir)
+    return pdf_out
+
+
+
diff --git a/src/slider/legacy_importer.py b/src/slider/legacy_importer.py
index 983f3fce5b47114c78af0fe2304d4b5bd735c199..a20a87e4d9dd429dfd8e4f2d518ce8914f84df40 100644
--- a/src/slider/legacy_importer.py
+++ b/src/slider/legacy_importer.py
@@ -3,7 +3,6 @@
 # https://github.com/eea/odfpy
 import os
 import shutil
-# import thtools
 from jinjafy import jinjafy_comment
 from bs4 import BeautifulSoup
 import glob
@@ -253,10 +252,9 @@ def svg_edit_to_importable(svg_edit_file,verbose=False):
             with open(svg_fonts_layers[-1], 'bw') as f2:
                 f2.write(s2.encode("UTF-8"))
 
-            from thtools.slider.convert import svg2pdf
+            from slider.convert import svg2pdf
             svg2pdf(svg_fonts_layers[-1], fout=pdf_nofonts_layers[-1], crop=False, text_to_path=True, export_area_page=True)
             # cmd = ['inkscape', '-C', '-T', '--without-gui', '--file=%s'%svg_fonts_layers[-1], '--export-pdf=%s' % pdf_nofonts_layers[-1]]
-            # thtools.execute_command(cmd)
 
     if verbose:
         print("svg_edit_to_importable called. converted svg file\n  > %s\nto files:"%svg_edit_file)
@@ -322,14 +320,15 @@ def slidedeck_to_images(slide_deck_pdf, base_out_pattern, num_to_take=None):
     opat.replace("%i", '%d')
     cmd = f"pdftk {slide_deck_pdf} burst output {opat} compress"
     print("pdftk splitting into ", num_pages)
-    thtools.execute_command(cmd.split())
+
+    execute_command(cmd.split())
     outfiles = []
     slide_deck_split_pdf = [base_out_pattern[:-4] % (i + 1) + "_tmp.pdf" for i in range(num_pages)]
     for i, opdf in enumerate(slide_deck_split_pdf):
         print("convertion", i, opdf)
         ofile = base_out_pattern %(i+1)
         cmd = f"pdf2svg {opdf} {ofile}"
-        thtools.execute_command(cmd.split())
+        execute_command(cmd.split())
         b = os.path.getsize(ofile)
         # print(b)
         if b == 0:
@@ -357,7 +356,7 @@ def slidedeck_to_images_DEFUNCT(slide_deck_pdf, base_out_pattern, num_to_take=No
 
 def num_pages_in_pdf(pdf_file):
     cmd = ['pdftk', '%s' % pdf_file, 'dump_data']
-    ss = thtools.execute_command(cmd)[0].splitlines()
+    ss = execute_command(cmd)[0].splitlines()
     s = int([s for s in ss if 'NumberOfPages' in s].pop().split()[-1])
     return s
 
@@ -368,11 +367,11 @@ def slide_to_image(slide_deck_pdf, output, page_to_take=1, use_inkscape=True):
     slide_deck_split_pdf = output[:-4] + "_tmp.pdf"
     ext = output[-3:]
     if ext == "svg":
-        from thtools.slider.convert import pdf2svg
+        from slider.convert import pdf2svg
         pdf2svg(slide_deck_pdf, fout=output, page_no=page_to_take)
         # cmd = ['pdftk', '%s' % slide_deck_pdf, 'cat', '%i' % page_to_take, 'output', '%s' % slide_deck_split_pdf]
         # # page_to_take = 1
-        # thtools.execute_command(cmd)
+
         # if use_inkscape:
         #     cmd = ['inkscape', '-C', '--without-gui', '--file=%s' % slide_deck_split_pdf, '-l', '%s' % output]
         # else:
@@ -381,7 +380,7 @@ def slide_to_image(slide_deck_pdf, output, page_to_take=1, use_inkscape=True):
         if os.path.exists(output):
             os.remove(output)
         cmd = ("pdftocairo -png -f %i -l %i"% (page_to_take, page_to_take)).split(" ") + [slide_deck_pdf, output]
-        thtools.execute_command(cmd)
+        execute_command(cmd)
     if ext == "png":
         png_with_postfix = glob.glob(output + "-*.png")
         if not png_with_postfix:
diff --git a/src/slider/slider.py b/src/slider/slider.py
index bbf3721a68a1e4f75a3b2cad005cfc413587cdea..fbb6f5439987b2c1b92851596d9a440a145aae89 100644
--- a/src/slider/slider.py
+++ b/src/slider/slider.py
@@ -1,11 +1,14 @@
 from slider import legacy_importer
 import PyPDF2
 import os
-# import thtools
+from jinjafy import execute_command
 from slider.legacy_importer import SVG_EDIT_RELPATH, SVG_TMP_RELPATH, move_template_files, DTU_beamer_base
 from jinjafy.cache import cache_update_str, cache_contains_str, cache_contains_file, cache_update_file
 import shutil
 from slider.slide_fixer import check_svg_file_and_fix_if_broken
+from slider import latexmk
+import glob
+
 dc = "\\documentclass"
 
 def fix_handout(s):
@@ -107,7 +110,7 @@ def set_svg_background_images(lecture_tex, verbose=False,
     else:
         cdir = os.getcwd()
         os.chdir(os.path.dirname(lecture_tex_nosvg))
-        thtools.execute_command(("latexmk -shell-escape -f -pdf -interaction=nonstopmode " + os.path.basename(lecture_tex_nosvg)).split(" "))
+        execute_command(("latexmk -shell-escape -f -pdf -interaction=nonstopmode " + os.path.basename(lecture_tex_nosvg)).split(" "))
         os.chdir(cdir)
         cache_update_file(MAIN_TEX_DIR, lecture_tex_nosvg)
         ANY_CHANGES = True
@@ -159,8 +162,9 @@ def set_svg_background_images(lecture_tex, verbose=False,
         ANY_CHANGES = True
 
     if ANY_CHANGES and recompile_on_change:
-        thtools.latexmk(lecture_tex)
-    import glob
+
+        latexmk(lecture_tex)
+
     if clean_temporary_files:
         if verbose:
             print("> SlideConverter: Removing temporary dirs...")