diff --git a/Templates/controller.pm.tem b/Templates/controller.pm.tem
new file mode 100644
index 0000000..d76f8c1
--- /dev/null
+++ b/Templates/controller.pm.tem
@@ -0,0 +1,130 @@
+package SrvMngr::Controller::${PackageName};
+
+#----------------------------------------------------------------------
+# heading : ${MenuHeading}
+# description : ${MenuDescription}
+# navigation : ${MenuNavigation}
+#
+# name : ${lcPackageName}, method : get, url : /${lcPackageName}, ctlact : ${lcPackageName}#main
+# name : ${lcPackageName}d, method : post, url : /${lcPackageName}d, ctlact : ${lcPackageName}#do_update
+#
+# routes : end
+#
+# Documentation: https://wiki.contribs.org/{PackageName}
+#----------------------------------------------------------------------
+
+use strict;
+use warnings;
+use Mojo::Base 'Mojolicious::Controller';
+
+use constant FALSE => 0;
+use constant TRUE => 1;
+
+use Locale::gettext;
+use SrvMngr::I18N;
+use SrvMngr qw(theme_list init_session);
+
+use Data::Dumper;
+
+use esmith::util;
+use esmith::HostsDB;
+use esmith::AccountsDB;
+use esmith::NetworksDB;
+use esmith::HostsDB;
+use esmith::DomainsDB;
+
+
+#The most common ones
+our $db = esmith::ConfigDB->open() || die("Couldn't open config db");
+our $adb = esmith::AccountsDB->open() || die("Couldn't open Accounts db");
+our $ndb = esmith::NetworksDB->open() || die("Couldn't open Network db");
+our $hdb = esmith::HostsDB->open() || die("Couldn't open Hosts db");
+our $ddb = esmith::DomainsDB->open() || die("Couldn't open Domains db");
+
+sub main {
+
+ my $c = shift;
+ $c->app->log->info( $c->log_req );
+
+ my %${prefix}_data = ();
+ my $title = $c->l("${prefix}_${MenuDescription}");
+ my $modul = '';
+
+ $$${prefix}_data{trt} = '${firstPanel}';
+
+ $c->stash(
+ title => $title,
+ modul => $modul,
+ ${prefix}_data => \%${prefix}_data
+ );
+ $c->render( template => "${PackageName}" );
+}
+
+sub do_update {
+ my $c = shift;
+ $c->app->log->info($c->log_req);
+
+ my %${prefix}_data = ();
+ my $title = $c->l("${prefix}_${MenuDescription}");
+
+ # Accessing all POST parameters
+ my %params = $c->req->params->to_hash;
+
+ # Get number of POST parameters
+ my $num_params = keys %params;
+
+ #Params are available in the hash "params"
+ # you may use:
+ foreach my $key (keys %params) {
+ my $value = $params{$key};
+ $c->app->log->debug("$key: $value");
+ }
+
+ # the value of trt will tell you which panel has returned
+ my $trt = $c->param('trt') || '${firstPanel}' ; #hidden control on every form.
+ my $ret = 'ok';
+ #Validate the parameters accordingly
+ \n\n%=l('${Label}'), class => 'label'\n\n%= ${Value}, class => 'data'\n\n \n%=l('${Label}')\n\n% my @${Name}_options = ${Value};\n% param '${Name}' => $$${prefix}_data->{${Name}} unless param '${Name}';\n%= select_field '${Name}' => @${Name}_options, class => 'input'\n \n%=l('${Label}')\n\n% param '${Name}' => $$${prefix}_data->{${Name}} unless param '${Name}';\n%= text_field '${Name}', size => '60', class => 'input'\n ${value}
",
+Date:"\n\n\n%=$%=l('${Label}')\n\n%=date_field '${Name}' =>$$${Name}\n
",
+Textinput:"\n\n${value}
",
+Paragraph:"\n
+ %= dumper $c->current_route +
+ % } + ++ %=$c->render_to_string(inline =>$c->l($$${prefix}_data->{first})) +
+ + %} elsif ($$${prefix}_data->{success}) { ++ %= $c->l($$${prefix}_data->{success}); +
++ %= $c->l($$${prefix}_data->{error}); +
+