Multiple identical calls to set_source method creates duplicate source terms
```
rxn.set_source(propname='pore.2nd_order_rxn', pores=Ps)
print(rxn.settings["sources"])
rxn.set_source(propname='pore.2nd_order_rxn', pores=Ps)
print(rxn.settings["sources"])

['pore.2nd_order_rxn']
['pore.2nd_order_rxn', 'pore.2nd_order_rxn']
```
`set_source` must check for duplicate `propname`, and ignore those.
diff --git a/openpnm/algorithms/ReactiveTransport.py b/openpnm/algorithms/ReactiveTransport.py
index 4edd1ca73..33ea931e3 100644
--- a/openpnm/algorithms/ReactiveTransport.py
+++ b/openpnm/algorithms/ReactiveTransport.py
@@ -154,7 +154,9 @@ class ReactiveTransport(GenericTransport):
                             + 'pores, cannot also assign source terms')
         # Set source term
         self[propname] = locs
-        self.settings['sources'].append(propname)
+        # Check if propname already in source term list
+        if propname not in self.settings['sources']:
+            self.settings['sources'].append(propname)
         # Add source term as an iterative prop
         self.set_iterative_props(propname)
 
diff --git a/tests/unit/algorithms/ReactiveTransportTest.py b/tests/unit/algorithms/ReactiveTransportTest.py
index 3f5975481..6968e92be 100644
--- a/tests/unit/algorithms/ReactiveTransportTest.py
+++ b/tests/unit/algorithms/ReactiveTransportTest.py
@@ -23,6 +23,20 @@ class ReactiveTransportTest:
                             quantity='pore.concentration',
                             regen_mode='deferred')
 
+    def test_multiple_set_source_with_same_name_should_only_keep_one(self):
+        rt = op.algorithms.ReactiveTransport(network=self.net,
+                                             phase=self.phase)
+        rt.settings.update({'conductance': 'throat.diffusive_conductance',
+                            'quantity': 'pore.concentration'})
+        rt.set_source(pores=self.net.pores('bottom'), propname='pore.reaction')
+        rt.set_source(pores=self.net.pores('bottom'), propname='pore.reaction')
+        rt.set_source(pores=self.net.pores('bottom'), propname='pore.reaction')
+        rt.set_value_BC(pores=self.net.pores('top'), values=1.0)
+        rt.run()
+        c_mean_desired = 0.648268
+        c_mean = rt['pore.concentration'].mean()
+        assert_allclose(c_mean, c_mean_desired, rtol=1e-6)
+
     def test_one_value_one_source(self):
         rt = op.algorithms.ReactiveTransport(network=self.net,
                                              phase=self.phase)
['openpnm/algorithms/ReactiveTransport.py', 'tests/unit/algorithms/ReactiveTransportTest.py']