diff --git a/modules/Bio/EnsEMBL/Hive/AnalysisCtrlRule.pm b/modules/Bio/EnsEMBL/Hive/AnalysisCtrlRule.pm
index cf7880fc9393a7c0cf78190aed69397c1723fdfa..711935fe4167bff670d059dfa64aa0be5f56e91e 100755
--- a/modules/Bio/EnsEMBL/Hive/AnalysisCtrlRule.pm
+++ b/modules/Bio/EnsEMBL/Hive/AnalysisCtrlRule.pm
@@ -42,6 +42,8 @@
 package Bio::EnsEMBL::Hive::AnalysisCtrlRule;
 
 use strict;
+use Scalar::Util ('weaken');
+
 use Bio::EnsEMBL::Hive::URLFactory;
 use Bio::EnsEMBL::Hive::Extensions;
 use Bio::EnsEMBL::Utils::Argument;
@@ -76,9 +78,14 @@ sub new {
 }
 
 sub adaptor {
-  my ( $self, $adaptor ) = @_;
-  $self->{'_adaptor'} = $adaptor if defined $adaptor;
-  return $self->{'_adaptor'};
+    my $self = shift @_;
+
+    if(@_) {
+        $self->{'_adaptor'} = shift @_;
+        weaken $self->{'_adaptor'};
+    }
+
+    return $self->{'_adaptor'};
 }
 
 
diff --git a/modules/Bio/EnsEMBL/Hive/AnalysisJob.pm b/modules/Bio/EnsEMBL/Hive/AnalysisJob.pm
index 04b6b95c9af990618767f64256b94366396f935e..82b3552fc1e64014e6d201f1523ad11fa9faa091 100755
--- a/modules/Bio/EnsEMBL/Hive/AnalysisJob.pm
+++ b/modules/Bio/EnsEMBL/Hive/AnalysisJob.pm
@@ -27,6 +27,8 @@
 package Bio::EnsEMBL::Hive::AnalysisJob;
 
 use strict;
+use Scalar::Util ('weaken');
+
 use Bio::EnsEMBL::Utils::Argument;  # import 'rearrange()'
 use Bio::EnsEMBL::Hive::DBSQL::AnalysisJobAdaptor;
 use Bio::EnsEMBL::Hive::DBSQL::DataflowRuleAdaptor;
@@ -58,11 +60,17 @@ sub new {
 }
 
 sub adaptor {
-  my $self = shift;
-  $self->{'_adaptor'} = shift if(@_);
-  return $self->{'_adaptor'};
+    my $self = shift @_;
+
+    if(@_) {
+        $self->{'_adaptor'} = shift @_;
+        weaken $self->{'_adaptor'};
+    }
+
+    return $self->{'_adaptor'};
 }
 
+
 sub dbID {
   my $self = shift;
   $self->{'_dbID'} = shift if(@_);
diff --git a/modules/Bio/EnsEMBL/Hive/AnalysisStats.pm b/modules/Bio/EnsEMBL/Hive/AnalysisStats.pm
index d6e5ed9f6ca43761c3f0ee2825a8154792166371..a9b381b0ee533c643faf27d42e8403654351941d 100755
--- a/modules/Bio/EnsEMBL/Hive/AnalysisStats.pm
+++ b/modules/Bio/EnsEMBL/Hive/AnalysisStats.pm
@@ -26,6 +26,7 @@
 package Bio::EnsEMBL::Hive::AnalysisStats;
 
 use strict;
+use Scalar::Util ('weaken');
 
 use Bio::EnsEMBL::Analysis;
 use Bio::EnsEMBL::DBSQL::DBAdaptor;
@@ -44,12 +45,19 @@ sub new {
   return $self;
 }
 
+
 sub adaptor {
-  my $self = shift;
-  $self->{'_adaptor'} = shift if(@_);
-  return $self->{'_adaptor'};
+    my $self = shift @_;
+
+    if(@_) {
+        $self->{'_adaptor'} = shift @_;
+        weaken $self->{'_adaptor'};
+    }
+
+    return $self->{'_adaptor'};
 }
 
+
 sub refresh {
     my $self = shift;
 
diff --git a/modules/Bio/EnsEMBL/Hive/DataflowRule.pm b/modules/Bio/EnsEMBL/Hive/DataflowRule.pm
index c52edd1b3c9b28cbb43047d9f735f13acd479407..2ddd3cc04dc836af3a6df77c442627b57da7be99 100755
--- a/modules/Bio/EnsEMBL/Hive/DataflowRule.pm
+++ b/modules/Bio/EnsEMBL/Hive/DataflowRule.pm
@@ -50,6 +50,8 @@
 package Bio::EnsEMBL::Hive::DataflowRule;
 
 use strict;
+use Scalar::Util ('weaken');
+
 use Bio::EnsEMBL::Utils::Argument;  # import 'rearrange()'
 use Bio::EnsEMBL::Utils::Exception;
 use Bio::EnsEMBL::Hive::DBSQL::AnalysisAdaptor;
@@ -112,12 +114,15 @@ sub dbID {
 sub adaptor {
     my $self = shift @_;
 
-    if(@_) { # setter mode
+    if(@_) {
         $self->{'_adaptor'} = shift @_;
+        weaken $self->{'_adaptor'};
     }
+
     return $self->{'_adaptor'};
 }
 
+
 =head2 branch_code
 
     Function: getter/setter method for the branch_code of the dataflow rule
diff --git a/modules/Bio/EnsEMBL/Hive/NakedTable.pm b/modules/Bio/EnsEMBL/Hive/NakedTable.pm
index fb40d4df127050c5208724c9c43de5c5f8b8e666..48f20497904b101b8d3fc958f36b711a5bb12867 100644
--- a/modules/Bio/EnsEMBL/Hive/NakedTable.pm
+++ b/modules/Bio/EnsEMBL/Hive/NakedTable.pm
@@ -20,6 +20,8 @@
 package Bio::EnsEMBL::Hive::NakedTable;
 
 use strict;
+use Scalar::Util ('weaken');
+
 use Bio::EnsEMBL::Utils::Argument;  # import 'rearrange()'
 
 sub new {
@@ -37,15 +39,19 @@ sub new {
     return $self;
 }
 
+
 sub adaptor {
     my $self = shift @_;
 
     if(@_) {
         $self->{'_adaptor'} = shift @_;
+        weaken $self->{'_adaptor'};
     }
+
     return $self->{'_adaptor'};
 }
 
+
 sub table_name {
     my $self = shift @_;
 
diff --git a/modules/Bio/EnsEMBL/Hive/ResourceDescription.pm b/modules/Bio/EnsEMBL/Hive/ResourceDescription.pm
index 337251a7f024e0cfbbc7a99b7b01f7a9324664b9..671a77c29548e09c760c812ef83f40cd0d189aee 100644
--- a/modules/Bio/EnsEMBL/Hive/ResourceDescription.pm
+++ b/modules/Bio/EnsEMBL/Hive/ResourceDescription.pm
@@ -27,6 +27,8 @@
 package Bio::EnsEMBL::Hive::ResourceDescription;
 
 use strict;
+use Scalar::Util ('weaken');
+
 use Bio::EnsEMBL::Utils::Argument;  # import 'rearrange()'
 
 sub new {
@@ -46,15 +48,19 @@ sub new {
     return $self;
 }
 
+
 sub adaptor {
     my $self = shift @_;
 
     if(@_) {
         $self->{'_adaptor'} = shift @_;
+        weaken $self->{'_adaptor'};
     }
+
     return $self->{'_adaptor'};
 }
 
+
 sub rc_id {
     my $self = shift @_;