diff --git a/hypha/apply/determinations/forms.py b/hypha/apply/determinations/forms.py
index 60755ef29c19a9580d43bdfb72f9c4a5a9b4be39..16693bf1a575bcea55ac8449c0a0a008bcf2ee08 100644
--- a/hypha/apply/determinations/forms.py
+++ b/hypha/apply/determinations/forms.py
@@ -370,7 +370,11 @@ class BaseProposalDeterminationForm(forms.Form):
     rationale.group = 4
 
 
-class BaseBatchDeterminationForm(DeterminationModelForm, forms.Form):
+class FormMixedMetaClass(type(StreamBaseForm), type(forms.Form)):
+    pass
+
+
+class BatchDeterminationForm(StreamBaseForm, forms.Form, metaclass=FormMixedMetaClass):
     submissions = forms.ModelMultipleChoiceField(
         queryset=ApplicationSubmission.objects.all(),
         widget=forms.ModelMultipleChoiceField.hidden_widget,
@@ -380,6 +384,24 @@ class BaseBatchDeterminationForm(DeterminationModelForm, forms.Form):
         widget=forms.ModelChoiceField.hidden_widget,
         required=True,
     )
+    outcome = forms.ChoiceField(
+        choices=DETERMINATION_CHOICES,
+        label='Determination',
+        help_text='Do you recommend requesting a proposal based on this concept note?',
+        widget=forms.HiddenInput()
+    )
+
+    def __init__(self, *args, user, submissions, action, initial={}, edit=False, **kwargs):
+        initial.update(submissions=submissions.values_list('id', flat=True))
+        try:
+            initial.update(outcome=TRANSITION_DETERMINATION[action])
+        except KeyError:
+            pass
+        initial.update(author=user.id)
+        super().__init__(*args, initial=initial, **kwargs)
+        self.fields['submissions'].disabled = True
+        self.fields['author'].disabled = True
+        self.fields['outcome'].disabled = True
 
     def data_fields(self):
         return [
@@ -387,11 +409,24 @@ class BaseBatchDeterminationForm(DeterminationModelForm, forms.Form):
             if field not in ['submissions', 'outcome', 'author', 'send_notice']
         ]
 
+    def clean(self):
+        cleaned_data = super().clean()
+        cleaned_data['form_data'] = {
+            key: value
+            for key, value in cleaned_data.items()
+            if key in self.data_fields()
+        }
+        return cleaned_data
+
+    def clean_outcome(self):
+        # Enforce outcome as an int
+        return int(self.cleaned_data['outcome'])
+
     def _post_clean(self):
         submissions = self.cleaned_data['submissions'].undetermined()
         data = {
             field: self.cleaned_data[field]
-            for field in ['author', 'data', 'outcome']
+            for field in ['author', 'form_data', 'outcome']
         }
 
         self.instances = [
@@ -408,21 +443,3 @@ class BaseBatchDeterminationForm(DeterminationModelForm, forms.Form):
         determinations = Determination.objects.bulk_create(self.instances)
         self.instances = determinations
         return determinations
-
-
-class BatchConceptDeterminationForm(BaseConceptDeterminationForm, BaseBatchDeterminationForm):
-    def __init__(self, *args, submissions, initial={}, **kwargs):
-        initial.update(submissions=submissions.values_list('id', flat=True))
-        super(BaseBatchDeterminationForm, self).__init__(*args, initial=initial, submission=None, **kwargs)
-        self.fields['outcome'].widget = forms.HiddenInput()
-
-        self.fields = self.apply_form_settings('concept', self.fields)
-
-
-class BatchProposalDeterminationForm(BaseProposalDeterminationForm, BaseBatchDeterminationForm):
-    def __init__(self, *args, submissions, initial={}, **kwargs):
-        initial.update(submissions=submissions.values_list('id', flat=True))
-        super(BaseBatchDeterminationForm, self).__init__(*args, initial=initial, **kwargs)
-        self.fields['outcome'].widget = forms.HiddenInput()
-
-        self.fields = self.apply_form_settings('proposal', self.fields)
diff --git a/hypha/apply/determinations/views.py b/hypha/apply/determinations/views.py
index 628f93ceaa73dfbfe9f5ace400676972fcca441d..4d37aafefbebe734c2b688afd4d0172d95f0530e 100644
--- a/hypha/apply/determinations/views.py
+++ b/hypha/apply/determinations/views.py
@@ -24,8 +24,7 @@ from hypha.apply.utils.views import CreateOrUpdateView, ViewDispatcher
 from hypha.apply.stream_forms.models import BaseStreamForm
 
 from .forms import (
-    BatchConceptDeterminationForm,
-    BatchProposalDeterminationForm,
+    BatchDeterminationForm,
     DeterminationModelForm,
 )
 from .models import (
@@ -49,32 +48,13 @@ from .options import (
 from .blocks import DeterminationBlock
 
 
-def get_form_for_stages(submissions):
-    forms = [
-        get_form_for_stage(submission, batch=True)
-        for submission in submissions
-    ]
-    if len(set(forms)) != 1:
-        raise ValueError('Submissions expect different forms - please contact admin')
-
-    return forms[0]
-
-
-def get_form_for_stage(submission, batch=False, edit=False):
-    if batch:
-        forms = [BatchConceptDeterminationForm, BatchProposalDeterminationForm]
-    index = submission.workflow.stages.index(submission.stage)
-    return forms[index]
-
-
 def get_fields_for_stages(submissions):
     forms_fields = [
         get_fields_for_stage(submission)
         for submission in submissions
     ]
-    # import ipdb; ipdb.set_trace()
-    # if len(set(forms)) != 1:
-    #     raise ValueError('Submissions expect different forms - please contact admin')
+    if not all(i == forms_fields[0] for i in forms_fields):
+        raise ValueError('Submissions expect different forms - please contact admin')
     return forms_fields[0]
 
 
@@ -259,8 +239,7 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
 
 @method_decorator(staff_required, name='dispatch')
 class BatchDeterminationCreateView(BaseStreamForm, CreateView):
-    submission_form_class = DeterminationModelForm
-    model = Determination
+    submission_form_class = BatchDeterminationForm
     template_name = 'determinations/batch_determination_form.html'
 
     def dispatch(self, *args, **kwargs):
@@ -291,12 +270,18 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
         kwargs = super().get_form_kwargs()
         kwargs['user'] = self.request.user
         kwargs['submissions'] = self.get_submissions()
-        kwargs['submission'] = None
         kwargs['action'] = self.get_action()
-        # kwargs['site'] = Site.find_for_request(self.request)
         kwargs.pop('instance')
         return kwargs
 
+    def get_form_class(self):
+        form_fields = self.get_form_fields()
+        field_blocks = self.get_defined_fields()
+        for field_block in field_blocks:
+            if isinstance(field_block.block, DeterminationBlock):
+                form_fields.pop(field_block.id)
+        return type('WagtailStreamForm', (self.submission_form_class,), form_fields)
+
     def get_defined_fields(self):
         return get_fields_for_stages(self.get_submissions())
 
@@ -318,7 +303,6 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
             determination.submission.id: determination
             for determination in form.instances
         }
-
         messenger(
             MESSAGES.BATCH_DETERMINATION_OUTCOME,
             request=self.request,
@@ -336,6 +320,9 @@ class BatchDeterminationCreateView(BaseStreamForm, CreateView):
                     'Unable to determine submission "{title}" as already determined'.format(title=submission.title),
                 )
             else:
+                determination.form_fields = self.get_defined_fields()
+                determination.message = form.cleaned_data[determination.message_field.id]
+                determination.save()
                 transition = transition_from_outcome(form.cleaned_data.get('outcome'), submission)
 
                 if determination.outcome == NEEDS_MORE_INFO: