diff --git a/app/models/invite_redeemer.rb b/app/models/invite_redeemer.rb
index e16f66ecd85..d12f0c57bb6 100644
--- a/app/models/invite_redeemer.rb
+++ b/app/models/invite_redeemer.rb
@@ -36,6 +36,12 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password) do
       user.password = password
     end
 
+    if !SiteSetting.must_approve_users? || (SiteSetting.must_approve_users? && invite.invited_by.staff?)
+      user.approved = true
+      user.approved_by_id = invite.invited_by_id
+      user.approved_at = Time.zone.now
+    end
+
     user.moderator = true if invite.moderator? && invite.invited_by.staff?
     user.save!
 
@@ -49,11 +55,11 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password) do
   end
 
   def process_invitation
+    approve_account_if_needed
     add_to_private_topics_if_invited
     add_user_to_invited_topics
     add_user_to_groups
     send_welcome_message
-    approve_account_if_needed
     notify_invitee
     send_password_instructions
     delete_duplicate_invites
@@ -109,7 +115,9 @@ InviteRedeemer = Struct.new(:invite, :username, :name, :password) do
   end
 
   def approve_account_if_needed
-    invited_user.approve(invite.invited_by_id, false)
+    if get_existing_user
+      invited_user.approve(invite.invited_by_id, false)
+    end
   end
 
   def send_password_instructions
diff --git a/spec/models/invite_redeemer_spec.rb b/spec/models/invite_redeemer_spec.rb
index c06b11e73d0..d1d93fda6bf 100644
--- a/spec/models/invite_redeemer_spec.rb
+++ b/spec/models/invite_redeemer_spec.rb
@@ -9,6 +9,7 @@ describe InviteRedeemer do
       expect(user.name).to eq('Walter White')
       expect(user).to be_active
       expect(user.email).to eq('walter.white@email.com')
+      expect(user.approved).to eq(true)
     end
 
     it "can set the password too" do
@@ -16,6 +17,7 @@ describe InviteRedeemer do
       user = InviteRedeemer.create_user_from_invite(Fabricate(:invite, email: 'walter.white@email.com'), 'walter', 'Walter White', password)
       expect(user).to have_password
       expect(user.confirm_password?(password)).to eq(true)
+      expect(user.approved).to eq(true)
     end
 
     it "raises exception with record and errors" do
@@ -37,7 +39,21 @@ describe InviteRedeemer do
     let(:password) { 'know5nOthiNG'}
     let(:invite_redeemer) { InviteRedeemer.new(invite, username, name) }
 
-    it "should redeem the invite" do
+    it "should redeem the invite if invited by staff" do
+      SiteSetting.must_approve_users = true
+      inviter = invite.invited_by
+      inviter.admin = true
+      user = invite_redeemer.redeem
+
+      expect(user.name).to eq(name)
+      expect(user.username).to eq(username)
+      expect(user.invited_by).to eq(inviter)
+      expect(inviter.notifications.count).to eq(1)
+      expect(user.approved).to eq(true)
+    end
+
+    it "should redeem the invite if invited by non staff but not approve" do
+      SiteSetting.must_approve_users = true
       inviter = invite.invited_by
       user = invite_redeemer.redeem
 
@@ -45,6 +61,18 @@ describe InviteRedeemer do
       expect(user.username).to eq(username)
       expect(user.invited_by).to eq(inviter)
       expect(inviter.notifications.count).to eq(1)
+      expect(user.approved).to eq(false)
+    end
+
+    it "should redeem the invite if invited by non staff and approve if staff not required to approve" do
+      inviter = invite.invited_by
+      user = invite_redeemer.redeem
+
+      expect(user.name).to eq(name)
+      expect(user.username).to eq(username)
+      expect(user.invited_by).to eq(inviter)
+      expect(inviter.notifications.count).to eq(1)
+      expect(user.approved).to eq(true)
     end
 
     it "should not blow up if invited_by user has been removed" do
@@ -63,6 +91,7 @@ describe InviteRedeemer do
       user = InviteRedeemer.new(invite, username, name, password).redeem
       expect(user).to have_password
       expect(user.confirm_password?(password)).to eq(true)
+      expect(user.approved).to eq(true)
     end
   end
 end
diff --git a/spec/models/invite_spec.rb b/spec/models/invite_spec.rb
index fab03714dd6..ed98c31ceda 100644
--- a/spec/models/invite_spec.rb
+++ b/spec/models/invite_spec.rb
@@ -273,6 +273,7 @@ describe Invite do
 
     context 'inviting when must_approve_users? is enabled' do
       it 'correctly activates accounts' do
+        invite.invited_by = Fabricate(:admin)
         SiteSetting.stubs(:must_approve_users).returns(true)
         user = invite.redeem
         expect(user.approved?).to eq(true)