diff --git a/commentaries/forms.py b/commentaries/forms.py
index b74c0f00a8fcf40a98b8de17af146a7596e1a5a4..b5b332e27ad68fd9d727e7a56911b0b00b31cf39 100644
--- a/commentaries/forms.py
+++ b/commentaries/forms.py
@@ -10,16 +10,20 @@ from scipost.models import Contributor
 
 
 class DOIToQueryForm(forms.Form):
-    VALID_DOI_REGEXP = r'^(?i)10.\d{4,9}/[-._;()/:A-Z0-9]+$'
-    doi = forms.RegexField(regex=VALID_DOI_REGEXP, strip=False, widget=forms.TextInput(
+    doi = forms.CharField(widget=forms.TextInput(
         {'label': 'DOI', 'placeholder': 'ex.: 10.21468/00.000.000000'}))
 
-    def clean_doi(self):
-        input_doi = self.cleaned_data['doi']
-        if Commentary.objects.filter(pub_DOI=input_doi).exists():
-            error_message = 'There already exists a Commentary Page on this publication.'
-            raise forms.ValidationError(error_message)
-        return input_doi
+# class DOIToQueryForm(forms.Form):
+#     VALID_DOI_REGEXP = r'^(?i)10.\d{4,9}/[-._;()/:A-Z0-9]+$'
+#     doi = forms.RegexField(regex=VALID_DOI_REGEXP, strip=False, widget=forms.TextInput(
+#         {'label': 'DOI', 'placeholder': 'ex.: 10.21468/00.000.000000'}))
+#
+#     def clean_doi(self):
+#         input_doi = self.cleaned_data['doi']
+#         if Commentary.objects.filter(pub_DOI=input_doi).exists():
+#             error_message = 'There already exists a Commentary Page on this publication.'
+#             raise forms.ValidationError(error_message)
+#         return input_doi
 
 
 class IdentifierToQueryForm(forms.Form):
diff --git a/commentaries/test_views.py b/commentaries/test_views.py
index 17ea43b4c1d38d48a40b41d0e9edddd86930d61a..82ad9463e6bd1146840c6590bdf4a00a2046bd98 100644
--- a/commentaries/test_views.py
+++ b/commentaries/test_views.py
@@ -7,7 +7,7 @@ from scipost.factories import ContributorFactory, UserFactory
 from .factories import UnvettedCommentaryFactory, VettedCommentaryFactory, UnpublishedVettedCommentaryFactory
 from .forms import CommentarySearchForm
 from .models import Commentary
-from .views import RequestCommentary
+from .views import RequestCommentary, prefill_using_DOI
 from common.helpers.test import add_groups_and_permissions
 
 
@@ -35,6 +35,21 @@ class RequestCommentaryTest(TestCase):
         raise NotImplementedError
 
 
+class PrefillUsingDOITest(TestCase):
+    def setUp(self):
+        add_groups_and_permissions()
+        self.target = reverse('commentaries:prefill_using_DOI')
+        self.physrev_doi = '10.1103/PhysRevB.92.214427'
+
+    def test_submit_valid_physrev_doi(self):
+        post_data = {'doi': self.physrev_doi}
+        request = RequestFactory().post(self.target, post_data)
+        request.user = UserFactory()
+
+        response = prefill_using_DOI(request)
+        self.assertRedirects(response, reverse('commentaries:request_commentary'))
+
+
 class VetCommentaryRequestsTest(TestCase):
     """Test cases for `vet_commentary_requests` view method"""
 
diff --git a/scipost/services.py b/scipost/services.py
index 085b8698630ea6e162edfd6c538d3ad2e179631d..56c403df83d0482de86c073ca25dd9dfc7bce89e 100644
--- a/scipost/services.py
+++ b/scipost/services.py
@@ -17,10 +17,45 @@ class DOICaller:
 
     def _call_crosslink(self):
         url = 'http://api.crossref.org/works/%s' % self.doi_string
-        self.crossref_data = requests.get(url).json()
+        self.crossref_data = requests.get(url).json()['message']
+
+    def _format_data(self):
+        data = self.crossref_data
+        pub_title = data['title'][0]
+        authorlist = ['{} {}'.format(author['given'], author['family']) for author in data['author']]
+        journal = data['container-title'][0]
+        volume = data.get('volume', '')
+        pages = self._get_pages(data)
+        pub_data = self._get_pub_date(data)
+
+
+    def _get_pages(self, data):
+        # For Physical Review
+        pages = data.get('article-number', '')
+        # For other journals?
+        pages = data.get('page', '')
+        return pages
+
+    def _get_pub_date(self, data):
+        date_parts = data.get('issued', {}).get('date_parts', {})
+        date_parts = data['issued']['date-parts'][0]
+        year = date_parts[0]
+        month = date_parts[1]
+        day = date_parts[2]
+        pub_date = "{}-{}-{}".format(year, month, day)
+
+        pub_date = ''
+        try:
+            pub_date = (str(data['message']['issued']['date-parts'][0][0]) + '-' +
+                        str(data['message']['issued']['date-parts'][0][1]))
+            try:
+                pub_date += '-' + str(
+                    data['message']['issued']['date-parts'][0][2])
+            except (IndexError, KeyError):
+                pass
+        except (IndexError, KeyError):
+            pass
 
-    def _collect_data(self):
-        # read out json here.