diff --git a/.gitignore b/.gitignore
index ccef0560f5e81eb78c47d43c0464ed4e04ee6434..76e3973efc72b4ca3f98d843236551f048afc855 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 /vendor/
-.idea
\ No newline at end of file
+.git
+.idea
diff --git a/src/Plugin/BasicTemplateLoader.php b/src/Plugin/BasicTemplateLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d3fd62f99689de4bac819367812ed0c210ecc2a
--- /dev/null
+++ b/src/Plugin/BasicTemplateLoader.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace WPDesk\PluginBuilder\Plugin;
+
+/**
+ * Class BasicTemplateLoader
+ */
+class BasicTemplateLoader implements TemplateLoader
+{
+
+	use TemplateLoad;
+
+}
diff --git a/src/Plugin/TemplateLoad.php b/src/Plugin/TemplateLoad.php
index c3a009884aa98c59111e2ee6270d9a7ed382fcfa..4061505221d017d7c5a27fc258df297e07efd67c 100644
--- a/src/Plugin/TemplateLoad.php
+++ b/src/Plugin/TemplateLoad.php
@@ -20,10 +20,16 @@ trait TemplateLoad {
 
 	/**
 	 * Init base variables for plugin
+	 *
+	 * @param \WPDesk_Plugin_Info $plugin_info Plugin info.
 	 */
-	public function init_template_base_variables() {
-		$this->plugin_path   = $this->plugin_info->get_plugin_dir();
-		$this->template_path = $this->plugin_info->get_text_domain();
+	public function init_template_base_variables( \WPDesk_Plugin_Info $plugin_info = null ) {
+		if ( null === $plugin_info ) {
+			// Backward compatibility! Do not remove.
+			$plugin_info = $this->plugin_info;
+		}
+		$this->plugin_path   = $plugin_info->get_plugin_dir();
+		$this->template_path = $plugin_info->get_text_domain();
 	}
 
 	/**
@@ -65,5 +71,31 @@ trait TemplateLoad {
 		return trailingslashit( $this->template_path );
 	}
 
+	/**
+	 * Set template path.
+	 *
+	 * @param string $template_path Template path.
+	 */
+	public function set_template_path( $template_path ) {
+		$this->template_path = $template_path;
+	}
+
+	/**
+	 * Get plugin path.
+	 *
+	 * @return string
+	 */
+	public function get_plugin_path() {
+		return trailingslashit( $this->plugin_path );
+	}
+
+	/**
+	 * Set plugin path.
+	 *
+	 * @param string $plugin_path Template path.
+	 */
+	public function set_plugon_path( $plugin_path ) {
+		$this->plugin_path = $plugin_path;
+	}
 
-}
\ No newline at end of file
+}
diff --git a/src/Plugin/TemplateLoader.php b/src/Plugin/TemplateLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b8e47242899d8b056add683c021bfa45c6a48be
--- /dev/null
+++ b/src/Plugin/TemplateLoader.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace WPDesk\PluginBuilder\Plugin;
+
+interface TemplateLoader {
+
+	/**
+	 * Init base variables for template loader.
+	 *
+	 * @param \WPDesk_Plugin_Info $plugin_info Plugin info.
+	 */
+	public function init_template_base_variables( \WPDesk_Plugin_Info $plugin_info = null );
+
+	/**
+	 * Renders end returns selected template
+	 *
+	 * @param string $name Name of the template.
+	 * @param string $path Additional inner path to the template.
+	 * @param array  $args args Accessible from template.
+	 *
+	 * @return string
+	 */
+	public function load_template( $name, $path = '', $args = array() );
+
+	/**
+	 * Get template path.
+	 *
+	 * @return string
+	 */
+	public function get_template_path();
+
+	/**
+	 * Set template path.
+	 *
+	 * @param string $template_path Template path.
+	 */
+	public function set_template_path( $template_path );
+
+	/**
+	 * Get plugin path.
+	 *
+	 * @return string
+	 */
+	public function get_plugin_path();
+
+	/**
+	 * Set plugin path.
+	 *
+	 * @param string $plugin_path Template path.
+	 */
+	public function set_plugon_path( $plugin_path );
+
+}
+