diff --git a/README.md b/README.md
index 998dadb..35ef404 100644
--- a/README.md
+++ b/README.md
@@ -114,3 +114,24 @@ Download
```groovy
compile 'eu.inloop:androidviewmodel:1.3.1'
```
+
+## Android Studio Template
+For faster creating new screens, you can use [Android Studio Template](/template/AVM_Inloop)
+
+
+
+### Install template
+#### Manually:
+Copy the template folder to Android Studio templates folder (`/Applications/Android Studio.app/Contents/plugins/android/lib/templates/others` on Mac)
+#### Automatically:
+Run the following command to download and install the template automatically (Mac only)
+```
+curl -o androidviewmodel.zip -Lk https://github.com/inloop/AndroidViewModel/archive/master.zip && unzip androidviewmodel.zip && cp -af AndroidViewModel-master/template/AVM_Inloop/. "/Applications/Android Studio.app/Contents/plugins/android/lib/templates/other/AVM_Inloop" && rm -r AndroidViewModel-master && rm androidviewmodel.zip
+```
+Don't forget to restart the Android Studio.
+
+### Usage
+In the Android Studio right click inside the Projet window and select `File > New > AndroidViewModel Inloop > AVM Fragment`
+
+
+
\ No newline at end of file
diff --git a/template/AVM_Inloop/avm_inloop_template_preview.png b/template/AVM_Inloop/avm_inloop_template_preview.png
new file mode 100644
index 0000000..4216781
Binary files /dev/null and b/template/AVM_Inloop/avm_inloop_template_preview.png differ
diff --git a/template/AVM_Inloop/globals.xml.ftl b/template/AVM_Inloop/globals.xml.ftl
new file mode 100644
index 0000000..691656d
--- /dev/null
+++ b/template/AVM_Inloop/globals.xml.ftl
@@ -0,0 +1,5 @@
+
+
+
+ <#include "../../activities/common/common_globals.xml.ftl" />
+
\ No newline at end of file
diff --git a/template/AVM_Inloop/recipe.xml.ftl b/template/AVM_Inloop/recipe.xml.ftl
new file mode 100644
index 0000000..2747958
--- /dev/null
+++ b/template/AVM_Inloop/recipe.xml.ftl
@@ -0,0 +1,48 @@
+
+
+
+ <#if appCompat && !(hasDependency('eu.inloop:androidviewmodel'))>
+
+ #if>
+
+ <#if screenType == "Fragment">
+
+
+ #if>
+ <#if screenType == "BindingFragment">
+
+
+ #if>
+
+ <#if generateViewInterface>
+
+ #if>
+
+
+ <#if scrPackage != "">
+
+ <#else>
+
+ #if>
+
+ <#if vmPackage != "">
+
+ <#else>
+
+ #if>
+
+ <#if vPackage != "">
+
+ <#else>
+
+ #if>
+
+
+
+
\ No newline at end of file
diff --git a/template/AVM_Inloop/root/src/app_package/BindingFragment.java.ftl b/template/AVM_Inloop/root/src/app_package/BindingFragment.java.ftl
new file mode 100644
index 0000000..429d61e
--- /dev/null
+++ b/template/AVM_Inloop/root/src/app_package/BindingFragment.java.ftl
@@ -0,0 +1,45 @@
+package ${packageName}<#if scrPackage != "">.${scrPackage}#if>;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+<#if vPackage != "">
+ import ${packageName}<#if vPackage != "">.${vPackage?replace('/','.')}#if>.I${viewModelClass?replace('ViewModel', 'View')};
+<#else>
+ import eu.inloop.viewmodel.IView;
+#if>
+import eu.inloop.viewmodel.binding.ViewModelBaseBindingFragment;
+import eu.inloop.viewmodel.binding.ViewModelBindingConfig;
+import ${packageName}.databinding.${underscoreToCamelCase(layoutName)}Binding;
+import ${packageName}.R;
+import ${packageName}<#if vmPackage != "">.${vmPackage?replace('/','.')}#if>.${viewModelClass};
+
+<#if vPackage != "">
+ public class ${screenClass}
+ extends ViewModelBase${screenType}
+ implements I${viewModelClass?replace('ViewModel', 'View')} {
+<#else>
+ public class ${screenClass} extends ViewModelBase${screenType} {
+#if>
+
+
+ public static ${screenClass} newInstance() {
+ final Bundle bundle = new Bundle();
+ // set arguments
+ final ${screenClass} fragment = new ${screenClass}();
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ setModelView(this);
+ }
+
+ @Override
+ public ViewModelBindingConfig getViewModelBindingConfig() {
+ return new ViewModelBindingConfig(R.layout.${layoutName}, getActivity());
+ }
+
+}
\ No newline at end of file
diff --git a/template/AVM_Inloop/root/src/app_package/Fragment.java.ftl b/template/AVM_Inloop/root/src/app_package/Fragment.java.ftl
new file mode 100644
index 0000000..97ce736
--- /dev/null
+++ b/template/AVM_Inloop/root/src/app_package/Fragment.java.ftl
@@ -0,0 +1,45 @@
+package ${packageName}<#if scrPackage != "">.${scrPackage}#if>;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+<#if vPackage != "">
+ import ${packageName}<#if vPackage != "">.${vPackage?replace('/','.')}#if>.I${viewModelClass?replace('ViewModel', 'View')};
+<#else>
+ import eu.inloop.viewmodel.IView;
+#if>
+import eu.inloop.viewmodel.base.ViewModelBaseFragment;
+import ${packageName}.R;
+import ${packageName}<#if vmPackage != "">.${vmPackage?replace('/','.')}#if>.${viewModelClass};
+
+<#if vPackage != "">
+ public class ${screenClass}
+ extends ViewModelBase${screenType}
+ implements I${viewModelClass?replace('ViewModel', 'View')} {
+<#else>
+ public class ${screenClass} extends ViewModelBase${screenType} {
+#if>
+
+ public static ${screenClass} newInstance() {
+ final Bundle bundle = new Bundle();
+ // set arguments
+ final ${screenClass} fragment = new ${screenClass}();
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.${layoutName}, container, false);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ setModelView(this);
+ }
+
+}
\ No newline at end of file
diff --git a/template/AVM_Inloop/root/src/app_package/ViewInterface.java.ftl b/template/AVM_Inloop/root/src/app_package/ViewInterface.java.ftl
new file mode 100644
index 0000000..d79121b
--- /dev/null
+++ b/template/AVM_Inloop/root/src/app_package/ViewInterface.java.ftl
@@ -0,0 +1,8 @@
+
+package ${packageName}<#if vmPackage != "">.${vPackage?replace('/','.')}#if>;
+
+import eu.inloop.viewmodel.IView;
+
+public interface I${viewModelClass?replace('ViewModel', 'View')} extends IView {
+
+}
\ No newline at end of file
diff --git a/template/AVM_Inloop/root/src/app_package/ViewModel.java.ftl b/template/AVM_Inloop/root/src/app_package/ViewModel.java.ftl
new file mode 100644
index 0000000..1e57b44
--- /dev/null
+++ b/template/AVM_Inloop/root/src/app_package/ViewModel.java.ftl
@@ -0,0 +1,24 @@
+
+package ${packageName}<#if vmPackage != "">.${vmPackage}#if>;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import eu.inloop.viewmodel.AbstractViewModel;
+<#if vPackage != "">
+ import ${packageName}<#if vPackage != "">.${vPackage?replace('/','.')}#if>.I${viewModelClass?replace('ViewModel', 'View')};
+<#else>
+ import eu.inloop.viewmodel.IView;
+#if>
+
+<#if vPackage != "">
+ public class ${viewModelClass} extends AbstractViewModel {
+<#else>
+ public class ${viewModelClass} extends AbstractViewModel {
+#if>
+
+ @Override
+ public void onCreate(@Nullable Bundle arguments, @Nullable Bundle savedInstanceState) {
+ super.onCreate(arguments, savedInstanceState);
+
+ }
+}
\ No newline at end of file
diff --git a/template/AVM_Inloop/root/src/app_package/binding_layout.xml.ftl b/template/AVM_Inloop/root/src/app_package/binding_layout.xml.ftl
new file mode 100644
index 0000000..f90065f
--- /dev/null
+++ b/template/AVM_Inloop/root/src/app_package/binding_layout.xml.ftl
@@ -0,0 +1,19 @@
+
+.${scrPackage?replace('/','.')}#if>.${screenClass}">
+
+
+ ${vmPackage?replace('/','.')}.#if>${viewModelClass}"/>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/template/AVM_Inloop/root/src/app_package/layout.xml.ftl b/template/AVM_Inloop/root/src/app_package/layout.xml.ftl
new file mode 100644
index 0000000..f0bf876
--- /dev/null
+++ b/template/AVM_Inloop/root/src/app_package/layout.xml.ftl
@@ -0,0 +1,9 @@
+.${scrPackage?replace('/','.')}#if>.${screenClass}"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+
\ No newline at end of file
diff --git a/template/AVM_Inloop/template.xml b/template/AVM_Inloop/template.xml
new file mode 100644
index 0000000..110cae4
--- /dev/null
+++ b/template/AVM_Inloop/template.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ avm_inloop_template_preview.png
+
+
+
+
+
+
\ No newline at end of file
diff --git a/template/create-new-template-preview.png b/template/create-new-template-preview.png
new file mode 100644
index 0000000..1d57607
Binary files /dev/null and b/template/create-new-template-preview.png differ
diff --git a/template/template-preview.png b/template/template-preview.png
new file mode 100644
index 0000000..70f9526
Binary files /dev/null and b/template/template-preview.png differ