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..6d5350ae6a98da3da0c162337a2b71e5808285fa
--- /dev/null
+++ b/src/Renderer/LoadTemplatePlugin.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace WPDesk\View\Renderer;
+
+use WPDesk\View\Resolver\Resolver;
+
+/**
+ * Can render templates
+ */
+class LoadTemplatePlugin implements Renderer {
+	private $plugin;
+
+	public function __construct($plugin) {
+		$this->plugin = $plugin;
+	}
+
+	public function set_resolver( Resolver $resolver ) {
+
+	}
+
+	public function render( $template, $params ) {
+		return $this->plugin->load_template($template, '', $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..291eae16120563f2e846a80860d6b1241c994f8d
--- /dev/null
+++ b/src/Resolver/Resolver.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace WPDesk\View\Resolver;
+
+/**
+ * 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, Resolver $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 );
-}