diff --git a/composer.json b/composer.json
index 7617b76b5a2f7e5278623e00b38493115ffdefe4..0baefc3528d090bbed41589085d5a404cc8bd32e 100644
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,7 @@
         "wimg/php-compatibility": "^8"
     },
     "autoload": {
-        "classmap": ["src/"]
+        "psr-4": {"WPDesk\\View\\": "src/"}
     },
     "autoload-dev": {
     },
diff --git a/src/Renderer/LoadTemplatePlugin.php b/src/Renderer/LoadTemplatePlugin.php
new file mode 100644
index 0000000000000000000000000000000000000000..7729af97a0c19c06e8489f1fce4f027c870b7b56
--- /dev/null
+++ b/src/Renderer/LoadTemplatePlugin.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WPDesk\View\Renderer;
+
+use WPDesk\View\Resolver\Resolver;
+
+/**
+ * Can render templates
+ */
+class LoadTemplatePlugin implements Renderer {
+	private $plugin;
+
+	private $path;
+
+	public function __construct($plugin, $path = '') {
+		$this->plugin = $plugin;
+		$this->path = $path;
+	}
+
+	public function set_resolver( Resolver $resolver ) {
+
+	}
+
+	public function render( $template, $params ) {
+		return $this->plugin->load_template($template, $this->path, $params);
+	}
+}
diff --git a/src/Renderer/Renderer.php b/src/Renderer/Renderer.php
new file mode 100644
index 0000000000000000000000000000000000000000..230e7649086442932f80d9ce36afb5badec8c146
--- /dev/null
+++ b/src/Renderer/Renderer.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WPDesk\View\Renderer;
+
+use WPDesk\View\Resolver\Resolver;
+
+/**
+ * Can render templates
+ */
+interface Renderer {
+	/**
+	 * Set the resolver used to map a template name to a resource the renderer may consume.
+	 *
+	 * @param  Resolver $resolver
+	 *
+	 * @return Resolver
+	 */
+	public function set_resolver( Resolver $resolver );
+
+	/**
+	 * @param string $template
+	 * @param array $params
+	 *
+	 * @return string
+	 */
+	public function render( $template, $params );
+}
diff --git a/src/Resolver/Resolver.php b/src/Resolver/Resolver.php
new file mode 100644
index 0000000000000000000000000000000000000000..74c56bab73156fbd249b889dc8133b038b0f6ce9
--- /dev/null
+++ b/src/Resolver/Resolver.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace WPDesk\View\Resolver;
+
+use WPDesk\View\Renderer\Renderer;
+
+/**
+ * Can resolve template name to a file
+ */
+interface Resolver {
+	/**
+	 * Resolve a template/pattern name to a resource the renderer can consume
+	 *
+	 * @param  string $name
+	 * @param  null|Resolver $renderer
+	 *
+	 * @return mixed
+	 */
+	public function resolve($name, Renderer $renderer = null);
+}
diff --git a/src/class-view.php b/src/class-view.php
deleted file mode 100644
index 0e076598fda3eeca2c29a99c89e3d5abb6658f1c..0000000000000000000000000000000000000000
--- a/src/class-view.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
-	exit;
-} // Exit if accessed directly
-
-/**
- * Can render templates
- */
-interface WPDesk_View {
-	/**
-	 * @param string $template
-	 * @param string $template_path
-	 * @param array $template_params
-	 *
-	 * @return string
-	 */
-	public function load_template( $template, $template_path, $template_params );
-}