diff --git a/shinyApp b/shinyApp
index 5482ae16123c7b026522882ef886f5721d185491..432d093e5c01c04466d6c72a8c7b94ce60940b25 100755
--- a/shinyApp
+++ b/shinyApp
@@ -1,118 +1,256 @@
 #!/bin/bash
 
+##======================================================================
+##                                                        Eduardo Junior
+##                                                    eduardo.jr@ufpr.br
+##                                                            13-11-2015
+##======================================================================
+## Facilitando a criacão e execução de aplicações shiny
+
+DIR=`pwd`
+SV=server.R
+UI=ui.R
+
+##======================================================================
+## Funções utilizadas
+
 _usage() {
     cat <<EOF
-init -o --open -n --nopen run 
 $*
     Uso:    shinyApp <command> [<args>]
 
-        init 
-            Inicia, no diretório atual, uma aplicação shiny criando os
-            arquivos server.R e ui.R de código mínino renderizável.
+        init: Inicia uma aplicação shiny no diretório atual
+		
+            -o : inicia os arquivos shiny em uma sessão emacs e 
+	    executa a função runApp, abrindo o navegador padrão
 
-            -o | --open : abre os arquivos server.R e ui.R no emacs e
-            e executam a função runApp abrindo o navegador padrão.
+            -t : cria os arquivos com template pré-definido
 
-            -n | --nopen :  Nega a opção acima.
+        run: Executa uma aplicação shiny, com função runApp
+	
+            -o : inicia os arquivos shiny em uma sessão emacs e 
+	    executa a função runApp, abrindo o navegador padrão
 
-        run
-            Executa a função runApp no diretório atual, iniciando uma
-            aplicação shiny existente.
+	    diretório: informe o diretório da aplicação shiny
 
     Example:
 
-        shinyApp -init 
-        shinyApp -init -n
-        shinyApp -init -o
-        shinyApp -run
+	shinyApp init
+	shinyApp init -t
+	shinyApp init -o -t
+	shinyApp init -to
+	shinyApp run -o
+        shinyApp run ~/path -o
 
 EOF
 }
 
-DIR=`pwd`
-SV=server.R
-UI=ui.R
-
-# ----------------------------------------------------------------------
-# Parametros do script
-if [ $# -lt 1 ]; then
-    echo "Consulte a documentação. shinyApp --help"
-    exit 1
-fi
+build_App() {
+    if [ -e "$SV" ] || [ -e "$UI" ]; then
+        echo "O diretório já contém arquivos ui.R e/ou server.R"
+        echo -n "    Deseja sobrescrever? "
+        read ANSWER    
+        case "$ANSWER" in
+	    s | sim | y | yes) echo "";;
+	    n | não | no) exit 1;;
+	    * ) echo "    Responda com as palavres: yes ou no"
+                exit 1
+        esac
+    fi
+    ##-------------------------------------------
+    # Criando o server.R
+    echo "##-------------------------------------------" > server.R
+    echo "## server.R" >> server.R
+    echo "" >> server.R
+    echo "library(shiny)" >> server.R
+    echo "" >> server.R
+    echo "shinyServer(" >> server.R
+    echo "    function(input, output, session) {" >> server.R
+    echo "        " >> server.R
+    echo "    }" >> server.R
+    echo ")" >> server.R
+    ##-------------------------------------------
+    # Criando o ui.R
+    echo "##-------------------------------------------" > ui.R
+    echo "## ui.R" >> ui.R
+    echo "" >> ui.R
+    echo "library(shiny)" >> ui.R
+    echo "" >> ui.R
+    echo "shinyUI(" >> ui.R
+    echo "    fluidPage(" >> ui.R
+    echo "        " >> ui.R
+    echo "    )" >> ui.R
+    echo ")" >> ui.R
+    ##-------------------------------------------
+    # Verificando a execução
+    case $1 in
+        run)
+            echo "Criando ui.R e server.R em $DIR"
+            emacs server.R ui.R &
+            echo "Pressione ^C para interromper a aplicação"
+            Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
+            ;;
+        *) 
+            echo "Arquivos criados em $DIR"
+    esac
+}
 
-if [ $# -eq 2 ]; then
-    case $2 in
-	-o | --open) 
-            ARGS=1;;
-	-n | --nopen) 
-            ARGS=0;;
-	* ) echo "Opção inválida! Consulte a documentação. shinyApp --help"
-            exit 1
+build_AppTemplate() {
+    if [ -e "$SV" ] || [ -e "$UI" ]; then
+        echo "O diretório já contém arquivos ui.R e/ou server.R"
+        echo -n "    Deseja sobrescrever? "
+        read ANSWER    
+        case "$ANSWER" in
+	    s | sim | y | yes) echo "";;
+	    n | não | no) exit 1;;
+	    * ) echo "    Responda com as palavres: yes ou no"
+                exit 1
+        esac
+    fi
+    ##-------------------------------------------
+    # Criando o server.R
+    echo "##-------------------------------------------" > server.R
+    echo "## server.R" >> server.R
+    echo "" >> server.R
+    echo "library(shiny)" >> server.R
+    echo "" >> server.R
+    echo ""
+    echo "shinyServer(" >> server.R
+    echo "    function(input, output, session) {" >> server.R
+    echo "        " >> server.R
+    echo "    }" >> server.R
+    echo ")" >> server.R
+    ##-------------------------------------------
+    # Criando o ui.R
+    echo "##-------------------------------------------" > ui.R
+    echo "## ui.R" >> ui.R
+    echo "" >> ui.R
+    echo "library(shiny)" >> ui.R
+    echo "" >> ui.R
+    echo "shinyUI(" >> ui.R
+    echo "    fluidPage(" >> ui.R
+    echo "        h1(\"Título\"," >> ui.R
+    echo "            style = \"font-family: 'Ubuntu Light';" >> ui.R
+    echo "            color: #fff; text-align: center;" >> ui.R
+    echo "            background-color: #C8C8C8;" >> ui.R
+    echo "            padding: 20px; font-weight: bold;\")" >> ui.R
+    echo "        " >> ui.R
+    echo "    )" >> ui.R
+    echo ")" >> ui.R
+    ##-------------------------------------------
+    # Verificando a execução
+    case $1 in
+        run)
+            echo "Criando ui.R e server.R em $DIR"
+            emacs server.R ui.R &
+            echo "Pressione ^C para interromper a aplicação"
+            Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
+            ;;
+        *) 
+            echo "Arquivos criados em $DIR"
     esac
-elif [ $# -eq 1 ]; then
-    ARGS=1
-else 
-    echo "Número de argumentos inválido! Consulte a documentação. shinyApp --help"
+}
+
+echo "-------------------------------------------"
+
+## Verificando quantidade de argumentos:
+if [ $# -eq 0 ] || [ $# -gt 3 ]; then
+    echo "Número de argumentos incorreto! Consulte shinyApp --help"
     exit 1
 fi
 
-# ----------------------------------------------------------------------
-# Iniciando a criação da aplicação shiny
-case $1 in
-    -h | --help)
-        _usage        
-        ;;
-    init)
-        if [ -e "$SV" ] || [ -e "$UI" ]; then
-            echo "O diretório já contém arquivos ui.R e/ou server.R"
-            echo -n "Deseja sobrescrever? "
-            read ANSWER    
-            case "$ANSWER" in
-	        s | sim | y | yes) echo "-------------------------------------------";;
-	        n | não | no) exit 1;;
-	        * ) echo "Responda com as palavres: yes ou no"
-                    exit 1
-            esac
-        fi
+# Daria para usar `getopts` se não houvesse a necessidade de dois comandos
+# secundários, init e run. getopts é MUITO MUItO útil para opções do
+# tipo -*
+
+##======================================================================
+## Inicia o script
 
-        # Criando o server.R
-        echo "##-------------------------------------------" > server.R
-        echo "## server.R" >> server.R
-        echo "" >> server.R
-        echo "library(shiny)" >> server.R
-        echo "" >> server.R
-        echo "shinyServer(" >> server.R
-        echo "    function(input, output) {" >> server.R
-        echo "" >> server.R
-        echo "    }" >> server.R
-        echo ")" >> server.R 
-
-        # Criando o ui.R
-        echo "##-------------------------------------------" > ui.R
-        echo "## ui.R" >> ui.R
-        echo "" >> ui.R
-        echo "library(shiny)" >> ui.R
-        echo "" >> ui.R
-        echo "shinyUI(" >> ui.R
-        echo "    fluidPage(" >> ui.R
-        echo "" >> ui.R
-        echo "    )" >> ui.R
-        echo ")" >> ui.R
-        
-        case $ARGS in
-	    1) 
+if [ $1 = "init" ]; then
+    if [ $# -eq 1 ]; then
+        build_App 
+    elif [ $# -eq 2 ]; then
+        case $2 in
+            -h | --help) _usage
+                ;;
+            -o) build_App run
+                ;;
+            -t) build_AppTemplate
+                ;;
+            -ot | -to) build_AppTemplate run
+                ;;
+            * ) echo "Argumentos incorretos! Consulte shinyApp --help"
+                exit 1
+        esac
+    elif [ $# -eq 3 ]; then
+        if ([ $2 = "-t" ] && [ $3 = "-o" ]) || ([ $2 = "-o" ] && [ $3 = "-t" ]); then
+            build_AppTemplate run
+        else
+            echo "Argumentos inválidos! Consulte shinyApp --help"
+            exit 1
+        fi
+    fi
+elif [ $1 = "run" ]; then
+    if [ $# -eq 1 ]; then
+        echo "Executando a aplicação em $DIR"
+        echo "Pressione ^C para interromper a aplicação"
+        Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
+    elif [ $# -eq 2 ]; then
+        case $2 in
+            -h | --help) _usage
+                ;;
+            -o ) 
+                echo "Executando a aplicação e abrir arquivos no emacs"
                 emacs server.R ui.R &
+                echo "Pressione ^C para interromper a aplicação"
                 Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
                 ;;
-	    0) 
-                echo "Arquivos criados em $DIR"
-                exit 1;;
+            *) 
+                if [ -d $2 ]; then  
+                    cd $2
+                    if [ ! -e "$SV" ] || [ ! -e "$UI" ]; then
+                        echo "Este diretório não contém uma aplicação shiny completa"
+                        echo "Verifique os arquivos server.R e ui.R em $2"
+                        exit 1
+                    fi
+                    echo "Executando a aplicação em $2"
+                    echo "Pressione ^C para interromper a aplicação"
+                    Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
+                else
+                    echo "Argumentos inválidos! Consulte shinyApp --help"
+                    exit 1
+                fi
         esac
-        ;;
-    run) Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
-        ;;
-    *) echo "Opção inválida!"
-        exit 1
-        ;;
-esac
-
+    elif [ $# -eq 3 ]; then
+        if [ $2 = "-o" ] && [ -d $3 ]; then
+            echo "Executando a aplicação em $3"
+            cd $3
+            if [ ! -e "$SV" ] || [ ! -e "$UI" ]; then
+                echo "Este diretório não contém uma aplicação shiny completa"
+                echo "Verifique os arquivos server.R e ui.R em $3"
+                exit 1
+            fi
+            emacs server.R ui.R &
+            echo "Pressione ^C para interromper a aplicação"
+            Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
+        elif [ -d $2 ] && [ $3 = "-o" ]; then
+            echo "Executando a aplicação em $2"
+            cd $2
+            if [ ! -e "$SV" ] || [ ! -e "$UI" ]; then
+                echo "Este diretório não contém uma aplicação shiny completa"
+                echo "Verifique os arquivos server.R e ui.R em $2"
+                exit 1
+            fi
+            emacs server.R ui.R &
+            echo "Pressione ^C para interromper a aplicação"
+            Rscript -e "shiny::runApp(getwd(), launch.browser = TRUE)"
+        else
+            echo "Argumentos inválidos! Consulte shinyApp --help"
+            exit 1            
+        fi
+    fi
+elif [ $1 = "-h" ] || [ $1 = "--help" ]; then
+    _usage
+else
+    echo "Argumentos inválidos! Consulte shinyApp --help"
+fi