diff --git a/app/corpora/routes.py b/app/corpora/routes.py
index ecfc1e84384bd1d95fa8fbacf6389164722b9906..1c669f61cfacebce85b9a286f350f1bc0a59d34e 100644
--- a/app/corpora/routes.py
+++ b/app/corpora/routes.py
@@ -68,17 +68,24 @@ def disable_corpus_is_public(corpus_id):
 @bp.route('/<hashid:corpus_id>/follow/<token>')
 @login_required
 def follow_corpus(corpus_id, token):
-    try:    
+    corpus = Corpus.query.get_or_404(corpus_id)
+    try:
         payload = jwt.decode(
-            token,
-            current_app.config['SECRET_KEY'],
-            algorithms=['HS256'],
-            issuer=current_app.config['SERVER_NAME'],
-            options={'require': ['iat', 'iss', 'sub']}
-        )
+                token,
+                current_app.config['SECRET_KEY'],
+                algorithms=['HS256'],
+                issuer=current_app.config['SERVER_NAME'],
+                # options={'require': ['exp', 'iat', 'iss', 'sub']}
+                options={'require': ['exp', 'iat', 'iss']}
+            )
     except jwt.PyJWTError:
-        return False
-    return redirect(url_for('.corpus', corpus_id=corpus_id))
+        abort(410)
+    # permission = payload.get('sub')
+    if not current_user.is_following_corpus(corpus):
+        current_user.follow_corpus(corpus)
+        db.session.commit()
+        flash(f'You are following {corpus.title} now', category='corpus')
+    return redirect(url_for('corpora.corpus', corpus_id=corpus_id))
 
 
 @bp.route('/<hashid:corpus_id>/followers/<hashid:follower_id>/unfollow', methods=['POST'])
@@ -167,6 +174,9 @@ def create_corpus():
 def corpus(corpus_id):
     corpus = Corpus.query.get_or_404(corpus_id)
     exp_date = (datetime.utcnow() + timedelta(days=7)).strftime('%b %d, %Y')
+    print(corpus.user)
+    print(current_user)
+    print(current_user.is_following_corpus(corpus))
     if corpus.user == current_user or current_user.is_administrator():
         return render_template(
             'corpora/corpus.html.j2',
@@ -188,15 +198,15 @@ def corpus(corpus_id):
 @login_required
 def generate_corpus_share_link(corpus_id):
     data = request.get_json('data')
-    permission = data['permission']
-    expiration = data['expiration']
-    corpus = Corpus.query.get_or_404(corpus_id)
+    # permission = data['permission']
+    exp_data = data['expiration']
+    expiration = datetime.strptime(exp_data, '%b %d, %Y')
     now = datetime.utcnow()
     payload = {
             'exp': expiration,
             'iat': now,
-            'iss': current_app.config['SERVER_NAME'],
-            'sub': permission
+            'iss': current_app.config['SERVER_NAME']
+            # 'sub': permission
         }
     token = jwt.encode(
             payload,
diff --git a/app/static/js/RessourceDisplays/CorpusDisplay.js b/app/static/js/RessourceDisplays/CorpusDisplay.js
index fd342dd4bcbedb51450edeef8e38a67e82e3cbc3..d42fa20c38e6ef00386c73a15d1873ed40662b7f 100644
--- a/app/static/js/RessourceDisplays/CorpusDisplay.js
+++ b/app/static/js/RessourceDisplays/CorpusDisplay.js
@@ -31,6 +31,7 @@ class CorpusDisplay extends RessourceDisplay {
     this.setStatus(corpus.status);
     this.setTitle(corpus.title);
     this.setNumTokens(corpus.num_tokens);
+    this.setShareLink();
   }
 
   onPatch(patch) {
@@ -117,4 +118,29 @@ class CorpusDisplay extends RessourceDisplay {
       new Date(creationDate).toLocaleString("en-US")
     );
   }
+
+  setShareLink() {
+    let generateShareLinkButton = this.displayElement.querySelector('#generate-share-link-button');
+    let copyShareLinkButton = this.displayElement.querySelector('#copy-share-link-button');
+    let shareLinkInput = this.displayElement.querySelector('#share-link-input');
+    let shareLinkContainer = this.displayElement.querySelector('#share-link-container');
+    // let permissionSelect = this.displayElement.querySelector('#permission-select');
+    let expirationDate = this.displayElement.querySelector('#expiration');
+
+    
+    generateShareLinkButton.addEventListener('click', () => {
+      // Utils.generateCorpusShareLinkRequest(`${this.corpusId}`, permissionSelect.value, expirationDate.value)
+      Utils.generateCorpusShareLinkRequest(`${this.corpusId}`, expirationDate.value)
+        .then((shareLink) => {
+          shareLinkContainer.classList.remove('hide');
+          shareLinkInput.value = shareLink;
+        });
+    });
+
+    copyShareLinkButton.addEventListener('click', () => {
+      shareLinkInput.select();
+      navigator.clipboard.writeText(shareLinkInput.value);
+      app.flash(`Copied!`, 'success');
+    });
+  }
 }
diff --git a/app/static/js/Utils.js b/app/static/js/Utils.js
index 80340d6c764dd6fc3714434cf2b6eb96e5407145..354f0f630eb57c19302808198a3bf00f3d1ed459 100644
--- a/app/static/js/Utils.js
+++ b/app/static/js/Utils.js
@@ -778,9 +778,11 @@ class Utils {
     });
   }
 
-  static generateCorpusShareLinkRequest(corpusId, permission, expiration) {
+  // static generateCorpusShareLinkRequest(corpusId, permission, expiration) {
+  static generateCorpusShareLinkRequest(corpusId, expiration) {
     return new Promise((resolve, reject) => {
-      const data = {permission: permission, expiration: expiration};
+      // const data = {permission: permission, expiration: expiration};
+      const data = {expiration: expiration};
       fetch(`/corpora/${corpusId}/generate-corpus-share-link`, {method: 'POST', headers: {Accept: 'text/plain'}, body: JSON.stringify(data)})
         .then(
           (response) => {
diff --git a/app/templates/corpora/corpus.html.j2 b/app/templates/corpora/corpus.html.j2
index 0e982d70beaec70c4b40492ea6cbf1e937cc5423..196faef2d596d7386019300619e8840b4640bc58 100644
--- a/app/templates/corpora/corpus.html.j2
+++ b/app/templates/corpora/corpus.html.j2
@@ -96,7 +96,7 @@
           </div>
           <br>
           <p></p>
-          <div class="row">
+          {# <div class="row">
             <div class="col s4">
               <div class="input-field">
                 <select id="permission-select">
@@ -107,7 +107,7 @@
                 <label>Permission</label>
               </div>
             </div>
-          </div>
+          </div> #}
           <div class="row">
             <div class="col s4">
               <div class="input-field">
@@ -119,8 +119,18 @@
           <div class="row">
             <div class="col s12">
               <a class="action-button btn waves-effect waves-light" id="generate-share-link-button">Generate Share Link</a>
-              <div id="share-link"></div>
-              <a class="action-button btn-small waves-effect waves-light hide" id="copy-share-link-button">Copy</a>
+            </div>
+            <div class="col s12 hide" id="share-link-container">
+              <p></p>
+              <br>
+              <div class="row">
+                <div class="col s1">
+                  <a class="action-button btn-small waves-effect waves-light" id="copy-share-link-button">Copy</a>
+                </div>
+                <div class="col s11">
+                  <input id="share-link-input" readonly>
+                </div>
+              </div>
             </div>
           </div>
         </div>
@@ -142,30 +152,5 @@
 {{ super() }}
 <script>
   let corpusDisplay = new CorpusDisplay(document.querySelector('#corpus-display'));
-  let generateShareLinkButton = document.querySelector('#generate-share-link-button');
-  let copyShareLinkButton = document.querySelector('#copy-share-link-button');
-  let shareLink = document.querySelector('#share-link');
-  let permissionSelect = document.querySelector('#permission-select');
-  let expirationDate = document.querySelector('#expiration');
-
-
-  generateShareLinkButton.addEventListener('click', () => {
-    Utils.generateCorpusShareLinkRequest('{{ corpus.hashid }}', permissionSelect.value, expirationDate.value)
-      .then((corpusShareLink) => {
-        console.log(corpusShareLink);
-        let shareLinkElement = document.createElement('input');
-        shareLinkElement.value = corpusShareLink;
-        shareLinkElement.setAttribute('readonly', '');
-        shareLink.appendChild(shareLinkElement);
-        copyShareLinkButton.classList.remove('hide');
-      });
-  });
-
-  copyShareLinkButton.addEventListener('click', () => {
-    let shareLinkElement = document.querySelector('#share-link input');
-    shareLinkElement.select();
-    document.execCommand('copy');
-    app.flash(`Copied!`, 'success');
-  });
 </script>
 {% endblock scripts %}
diff --git a/app/templates/corpora/public_corpus.html.j2 b/app/templates/corpora/public_corpus.html.j2
index 94b3524cee745f0e591636003d62d43e504c3d8a..63744441d8d3dfc85f9eef2086a5b4f03975cc7b 100644
--- a/app/templates/corpora/public_corpus.html.j2
+++ b/app/templates/corpora/public_corpus.html.j2
@@ -61,13 +61,13 @@
   let unfollowRequestElement = document.querySelector('.action-button[data-action="unfollow-request"]');
   unfollowRequestElement.addEventListener('click', () => {
     return new Promise((resolve, reject) => {
-      fetch('{{ url_for("corpora.unfollow_corpus", corpus_id=corpus.id) }}', {method: 'POST', headers: {Accept: 'application/json'}})
+      fetch('{{ url_for("corpora.current_user_unfollow_corpus", corpus_id=corpus.id) }}', {method: 'POST', headers: {Accept: 'application/json'}})
         .then(
           (response) => {
             if (response.status === 403) {app.flash('Forbidden', 'error'); reject(response);}
             if (response.status === 404) {app.flash('Not Found', 'error'); reject(response);}
             resolve(response);
-            window.location.href = '{{ url_for("corpora.corpus", corpus_id=corpus.id) }}';
+            window.location.href = '{{ url_for("main.dashboard") }}';
           },
           (response) => {
             app.flash('Something went wrong', 'error');