diff --git a/app/controllers/hosts_controller.rb b/app/controllers/hosts_controller.rb
index 4917eec..ac74a94 100644
--- a/app/controllers/hosts_controller.rb
+++ b/app/controllers/hosts_controller.rb
@@ -1,126 +1,171 @@
 class HostsController < ApplicationController
   before_action :require_logged_in
   before_action :fetch_host, only: [:show, :edit, :update, :destroy, :submit_config,
                                     :revoke, :disable]
   before_action :fetch_hosts_of_user, only: [:new, :edit, :create]
 
   # GET /hosts/new
   def new
     @host = Host.new
     @host.port = 9102
   end
 
   # POST /hosts
   def create
     @host = Host.new(fetch_params)
 
     set_host_type
 
     @host.verified = !@host.institutional?
 
     if user_can_add_this_host? && @host.save
       flash[:success] = 'Host created successfully'
       current_user.hosts << @host
       UserMailer.notify_admin(current_user, @host.fqdn).deliver
       redirect_to host_path @host
     else
       flash[:error] = 'Host was not created'
       render :new
     end
   end
 
   # GET /hosts/1
   def show
     @schedules = @host.job_templates.map(&:schedule)
     @filesets = @host.job_templates.map(&:fileset)
   end
 
   # GET /hosts/1/edit
   def edit; end
 
   # PATCH /hosts/1
   def update
     updates = fetch_params.slice(:port, :password)
     if updates.present? && @host.update_attributes(updates)
       @host.recalculate if @host.bacula_ready?
       flash[:success] = 'Host updated successfully. You must update your file deamon accordingly.'
       redirect_to host_path @host
     else
       render :edit
     end
   end
 
   # DELETE /hosts/1
   def destroy
     if @host.destroy
       flash[:success] = 'Host destroyed successfully'
     else
       flash[:error] = 'Host not destroyed'
     end
 
     redirect_to root_path
   end
 
   # POST /hosts/1/disable
   def disable
     if @host.disable_jobs_and_update
       flash[:success] = 'Client disabled'
     else
       flash[:error] = 'Something went wrong, try again later'
     end
 
     redirect_to host_path(@host)
   end
 
   # POST /hosts/1/submit_config
   def submit_config
     if @host.dispatch_to_bacula
       flash[:success] = 'Host configuration sent to Bacula successfully'
     else
       flash[:error] = 'Something went wrong, try again later'
     end
 
     redirect_to host_path(@host)
   end
 
   # DELETE /hosts/1/revoke
   def revoke
     if @host.remove_from_bacula
       flash[:success] = 'Host configuration removed from Bacula successfully'
     else
       flash[:error] = 'Something went wrong, try again later'
     end
 
     redirect_to root_path
   end
 
+  # GET /hosts/fetch_vima_hosts
+  def fetch_vima_hosts
+    if params[:code].blank?
+      return redirect_to client.auth_code.authorize_url(:redirect_uri => redirect_uri,
+                                                        scope: 'read')
+    end
+
+    access_token = client.auth_code.get_token(
+      params['code'],
+      { :redirect_uri => redirect_uri },
+      { :mode => :query, :param_name => "access_token", :header_format => "" }
+    )
+
+    vms = access_token.get(
+      'https://vima.grnet.gr/instances/list?tag=vima:service:archiving',
+      { mode: :query, param_name: 'access_token' }
+    ).parsed.deep_symbolize_keys[:response][:instances]
+
+    session[:vms] = vms.first(50)
+    Host.where(fqdn: vms).each do |host|
+      host.users << current_user unless host.users.include?(current_user)
+    end
+
+    redirect_to new_host_path
+  end
+
   private
 
+  def client
+    OAuth2::Client.new(
+      Rails.application.secrets.oauth2_vima_client_id,
+      Rails.application.secrets.oauth2_vima_secret,
+      site: 'https://vima.grnet.gr',
+      token_url: "/o/token",
+      authorize_url: "/o/authorize",
+      :ssl => {:ca_path => "/etc/ssl/certs"}
+    )
+  end
+
+  def redirect_uri
+    uri = URI.parse(request.url)
+    uri.scheme = 'https' unless Rails.env.development?
+    uri.path = '/hosts/fetch_vima_hosts'
+    uri.query = nil
+    uri.to_s
+  end
+
   def fetch_hosts_of_user
     return if not current_user.needs_host_list?
 
     @hosts_of_user = session[:vms] - current_user.hosts.pluck(:fqdn)
   end
 
   def fetch_host
     @host = current_user.hosts.includes(job_templates: [:fileset, :schedule]).find(params[:id])
   end
 
   def fetch_params
     params.require(:host).permit(:fqdn, :port, :password)
   end
 
   def user_can_add_this_host?
     !current_user.needs_host_list? || @hosts_of_user.include?(@host.fqdn)
   end
 
   def set_host_type
     @host.origin = if current_user.vima?
                      :vima
                    elsif current_user.okeanos?
                      :okeanos
                    else
                      :institutional
                    end
   end
 end
diff --git a/app/views/hosts/_form.html.erb b/app/views/hosts/_form.html.erb
index 061bbfc..802b609 100644
--- a/app/views/hosts/_form.html.erb
+++ b/app/views/hosts/_form.html.erb
@@ -1,21 +1,30 @@
 <%= bootstrap_form_for(@host, layout: :horizontal,
                        label_col: 'col-xs-3', control_col: 'col-xs-8') do |f| %>
   <div>
 
     <% if current_user.needs_host_list? %>
       <%= f.select :fqdn, options_for_select(@hosts_of_user, @host.fqdn), {},
                    disabled: @host.persisted? %>
     <% else %>
       <%= f.text_field :fqdn, disabled: @host.persisted? %>
     <% end %>
     <%= f.password_field :password %>
     <%= f.number_field :port, min: 1 %>
   </div>
 
 
   <div class="form-group">
-    <div class="col-xs-offset-3 col-xs-8">
+    <div class="col-xs-offset-3 col-xs-2">
       <%= f.submit class: 'btn btn-success' %>
     </div>
+    <% if current_user.vima? %>
+      <div class="col-xs-offset-3 col-xs-2">
+        <%= link_to fetch_vima_hosts_path, role: :button, class: 'btn btn-default' do %>
+          <label class="glyphicon glyphicon-refresh text-primary"></label>
+          Fetch Hosts
+        <% end %>
+      </div>
+    <% end %>
   </div>
+
 <% end %>
diff --git a/app/views/hosts/new.html.erb b/app/views/hosts/new.html.erb
index 2e41c5f..bcd7bbd 100644
--- a/app/views/hosts/new.html.erb
+++ b/app/views/hosts/new.html.erb
@@ -1,7 +1,13 @@
-<h1>New Host</h1>
-
-<div class="container graybox">
-  <%= render 'form' %>
+<div class="row">
+  <div class="col-xs-4">
+    <div class="panel panel-default">
+      <div class="panel-heading">
+        <h3>New Host</h3>
+      </div>
+      <br />
+      <%= render 'form' %>
+    </div>
+  </div>
 </div>
 
 <%= link_to 'Back', clients_path %>
diff --git a/config/routes.rb b/config/routes.rb
index 2238249..89647b7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,99 +1,103 @@
 Rails.application.routes.draw do
   root 'application#index'
   post 'grnet' => 'application#grnet'
   get 'institutional' => 'application#institutional'
   match 'vima', to: 'application#vima', :via => [:get, :post]
   get 'logout' => 'application#logout'
 
   resources :clients, only: [:index, :show] do
     member do
       get :jobs
       get :logs
       get :stats
       post :stats
       get :users
       get :restore
       post :run_restore
       post :restore_selected
       delete :remove_user
     end
 
     collection do
       post :index
     end
   end
 
   resources :clients, only: [], param: :client_id do
     member do
       get :tree
     end
   end
 
   resources :invitations, only: [:create]
 
   get '/invitations/:host_id/:verification_code/accept' => 'invitations#accept',
     as: :accept_invitation
 
   resources :hosts, only: [:new, :create, :show, :edit, :update, :destroy] do
     member do
       post :submit_config
       post :disable
       delete :revoke
     end
 
+    collection do
+      get :fetch_vima_hosts, to: 'hosts#fetch_vima_hosts', as: :fetch_vima
+    end
+
     resources :jobs, only: [:new, :create, :show, :edit, :update, :destroy] do
       member do
         patch :toggle_enable
         post :backup_now
       end
     end
 
     resources :filesets, only: [:show, :new, :create, :edit, :update, :destroy]
     resources :schedules, only: [:show, :new, :edit, :create, :update, :destroy]
   end
 
   namespace :admin do
     match '/', to: 'base#index', via: [:get, :post]
 
     get '/login' => 'base#login', as: :login
 
     resources :settings, only: [:index, :new, :create, :edit, :update] do
       member do
         delete :reset
       end
     end
 
     resources :clients, only: [:index, :show] do
       member do
         get :jobs
         get :logs
         get :stats
         post :stats
         get :configuration
         post :disable
         post :block
         post :unblock
         delete :revoke
       end
     end
 
     resources :hosts, only: [:show] do
       collection do
         get :unverified
       end
 
       member do
         post :verify
       end
     end
 
     resources :users, only: [:index, :new, :create, :show, :edit, :update] do
       member do
         patch :ban
         patch :unban
       end
     end
 
     resources :pools, only: [:index, :new, :create, :show, :edit, :update]
   end
 end