diff --git a/app/controllers/projects/clusters/applications_controller.rb b/app/controllers/projects/clusters/applications_controller.rb
index 438e1853435f89142fe1c1aa1a2182d2a150abfa..cdebbdefb3f5044705508c13324494f2312c09fa 100644
--- a/app/controllers/projects/clusters/applications_controller.rb
+++ b/app/controllers/projects/clusters/applications_controller.rb
@@ -4,18 +4,14 @@ class Projects::Clusters::ApplicationsController < Projects::ApplicationControll
   before_action :authorize_read_cluster!
   before_action :authorize_create_cluster!, only: [:create]
 
-  def new
-  end
-
   def create
     return render_404 if application
 
-    new_application = application_class.create(cluster: cluster)
-
     respond_to do |format|
       format.json do
-        if new_application.persisted?
-          head :ok
+        # TODO: Do that via Service
+        if application_class.create(cluster: cluster).persisted?
+          head :no_data
         else
           head :bad_request
         end
@@ -26,11 +22,11 @@ class Projects::Clusters::ApplicationsController < Projects::ApplicationControll
   private
 
   def cluster
-    @cluster ||= project.clusters.find_by(cluster_id: params[:cluster_id]).present(current_user: current_user)
+    @cluster ||= project.clusters.find(params[:id]) || render_404
   end
 
   def application_class
-    Clusters::Cluster::Applications.find(params[:application])
+    Clusters::Cluster::APPLICATIONS[params[:application]] || render_404
   end
 
   def application
diff --git a/app/models/clusters/applications/helm.rb b/app/models/clusters/applications/helm.rb
index 59e0076c8df5fa379079811523ff13228ece7707..a18a3f87bc47d73b7972d6d65273e1006814ad26 100644
--- a/app/models/clusters/applications/helm.rb
+++ b/app/models/clusters/applications/helm.rb
@@ -7,7 +7,7 @@ module Clusters
 
       include ::Clusters::Concerns::AppStatus
 
-      belongs_to :cluser, class_name: 'Clusters::Cluster', foreign_key: :cluster_id
+      belongs_to :cluster, class_name: 'Clusters::Cluster', foreign_key: :cluster_id
 
       default_value_for :version, Gitlab::Clusters::Helm::HELM_VERSION
 
diff --git a/app/workers/concerns/cluster_app.rb b/app/workers/concerns/cluster_app.rb
index a0202901f156b8ab6f6421cae704aff4f4141665..947cdaefcb7816c7d41c3eca38a002565585ebb9 100644
--- a/app/workers/concerns/cluster_app.rb
+++ b/app/workers/concerns/cluster_app.rb
@@ -3,7 +3,7 @@ module ClusterApp
 
   included do
     def find_app(app_name, id)
-      Clusters::Applications.const_get(app_name.classify).find(id).try do |app|
+      Clusters::Cluster::APPLICATIONS[app_name].find(id).try do |app|
         yield(app) if block_given?
       end
     end
diff --git a/config/routes/project.rb b/config/routes/project.rb
index a6a7c5e74828111cbe98199a504166248258dace..55dab840dca61d87fdaf329729368ce3cc169170 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -191,8 +191,8 @@ constraints(ProjectUrlConstrainer.new) do
         member do
           get :status, format: :json
 
-          scope '*application' do
-            resource :applications, only: [:create]
+          scope :applications do
+            get '/*application', to: 'clusters/applications#create'
           end
         end
       end