diff --git a/source/java/org/alfresco/repo/replication/script/ScriptReplicationDefinition.java b/source/java/org/alfresco/repo/replication/script/ScriptReplicationDefinition.java
new file mode 100644
index 0000000000..1121112219
--- /dev/null
+++ b/source/java/org/alfresco/repo/replication/script/ScriptReplicationDefinition.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2005-2010 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+package org.alfresco.repo.replication.script;
+
+import java.util.List;
+
+import org.alfresco.repo.jscript.ScriptAction;
+import org.alfresco.repo.jscript.ScriptNode;
+import org.alfresco.service.ServiceRegistry;
+import org.alfresco.service.cmr.action.Action;
+import org.alfresco.service.cmr.action.ActionDefinition;
+import org.alfresco.service.cmr.replication.ReplicationDefinition;
+import org.alfresco.service.cmr.replication.ReplicationService;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.mozilla.javascript.Scriptable;
+
+/**
+ * ReplicationDefinition JavaScript Object. This class is a JavaScript-friendly wrapper for
+ * the {@link ReplicationDefinition replicationDefinition} class.
+ *
+ * @author Nick Burch
+ * @see org.alfresco.service.cmr.replication.ReplicationDefinition
+ */
+public final class ScriptReplicationDefinition extends ScriptAction
+{
+ private static final long serialVersionUID = -6729144733846247372L;
+
+ private ReplicationService replicationService;
+
+ public ScriptReplicationDefinition(ServiceRegistry serviceRegistry, ReplicationService replicationService,
+ Scriptable scope, ReplicationDefinition replicationDefinition)
+ {
+ super(serviceRegistry, (Action)replicationDefinition, (ActionDefinition)replicationDefinition);
+ this.replicationService = replicationService;
+ }
+
+ /**
+ * Returns the name of this replication definition
+ *
+ * @return the name which uniquely identifies this replication definition.
+ */
+ public String getReplicationName()
+ {
+ return getReplicationDefinition().getReplicationName();
+ }
+
+ public String getDescription()
+ {
+ return getReplicationDefinition().getDescription();
+ }
+
+ public String getTargetName()
+ {
+ return getReplicationDefinition().getTargetName();
+ }
+ public void setTargetName(String target)
+ {
+ getReplicationDefinition().setTargetName(target);
+ }
+
+ public ScriptNode[] getPayload()
+ {
+ List payload = getReplicationDefinition().getPayload();
+ ScriptNode[] nodes = new ScriptNode[payload.size()];
+
+ for(int i=0; i payload = getReplicationDefinition().getPayload();
+ payload.clear();
+
+ for(ScriptNode payloadNode : payloadNodes)
+ {
+ payload.add(payloadNode.getNodeRef());
+ }
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder msg = new StringBuilder();
+ msg.append(this.getClass().getSimpleName())
+ .append("[").append(getReplicationName()).append("]");
+
+ return msg.toString();
+ }
+
+ ReplicationDefinition getReplicationDefinition()
+ {
+ return (ReplicationDefinition)action;
+ }
+
+ /**
+ * Triggers the execution of the replication.
+ */
+ public void replicate()
+ {
+ executeImpl(null);
+ }
+
+ @Override
+ protected void executeImpl(ScriptNode node)
+ {
+ ReplicationDefinition replicationDefinition = getReplicationDefinition();
+ replicationService.replicate(replicationDefinition);
+ }
+}
diff --git a/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java b/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java
new file mode 100644
index 0000000000..ab94e6d67d
--- /dev/null
+++ b/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2005-2010 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+package org.alfresco.repo.replication.script;
+
+import java.util.List;
+
+import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
+import org.alfresco.service.ServiceRegistry;
+import org.alfresco.service.cmr.replication.ReplicationDefinition;
+import org.alfresco.service.cmr.replication.ReplicationService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Script object representing the replication service.
+ *
+ * @author Nick Burch
+ */
+public class ScriptReplicationService extends BaseScopableProcessorExtension
+{
+ private static Log logger = LogFactory.getLog(ScriptReplicationService.class);
+
+ /** The Services registry */
+ private ServiceRegistry serviceRegistry;
+ private ReplicationService replicationService;
+
+ /**
+ * Set the service registry
+ *
+ * @param serviceRegistry the service registry.
+ */
+ public void setServiceRegistry(ServiceRegistry serviceRegistry)
+ {
+ this.serviceRegistry = serviceRegistry;
+ }
+
+ /**
+ * Set the replication service
+ *
+ * @param replicationService the replication service.
+ */
+ public void setReplicationService(ReplicationService replicationService)
+ {
+ this.replicationService = replicationService;
+ }
+
+ /**
+ * Creates a new {@link ScriptReplicationDefinition} and sets the replication name and
+ * the description to the specified values.
+ *
+ * @param replicationName A unique identifier used to specify the created
+ * {@link ScriptReplicationDefinition}.
+ * @param description A description of the replication
+ * @return the created {@link ScriptReplicationDefinition}.
+ * @see org.alfresco.service.cmr.replication.ReplicationService#createReplicationDefinition(String, String)
+ */
+ public ScriptReplicationDefinition createReplicationDefinition(String replicationName, String description)
+ {
+ if (logger.isDebugEnabled())
+ {
+ StringBuilder msg = new StringBuilder();
+ msg.append("Creating ScriptReplicationDefinition [")
+ .append(replicationName).append(", ")
+ .append(description).append("]");
+ logger.debug(msg.toString());
+ }
+
+ ReplicationDefinition replicationDefinition = replicationService.createReplicationDefinition(replicationName, description);
+ return new ScriptReplicationDefinition(serviceRegistry, replicationService, this.getScope(), replicationDefinition);
+ }
+
+ public void saveReplicationDefinition(ScriptReplicationDefinition definition)
+ {
+ if (logger.isDebugEnabled())
+ {
+ StringBuilder msg = new StringBuilder();
+ msg.append("Saving ScriptReplicationDefinition [")
+ .append(definition.getReplicationName()).append(", ")
+ .append(definition.getDescription()).append("]");
+ logger.debug(msg.toString());
+ }
+
+ ReplicationDefinition replicationDefinition = definition.getReplicationDefinition();
+ replicationService.saveReplicationDefinition(replicationDefinition);
+ }
+
+ public ScriptReplicationDefinition loadReplicationDefinition(String replicationName)
+ {
+ ReplicationDefinition replicationDefinition = replicationService.loadReplicationDefinition(replicationName);
+ return new ScriptReplicationDefinition(serviceRegistry, replicationService, this.getScope(), replicationDefinition);
+ }
+
+ public ScriptReplicationDefinition[] loadReplicationDefinitions()
+ {
+ List definitions = replicationService.loadReplicationDefinitions();
+ return toScriptReplicationDefinitions(definitions);
+ }
+
+ public ScriptReplicationDefinition[] loadReplicationDefinitions(String targetName)
+ {
+ List definitions = replicationService.loadReplicationDefinitions(targetName);
+ return toScriptReplicationDefinitions(definitions);
+ }
+
+ private ScriptReplicationDefinition[] toScriptReplicationDefinitions(List definitions)
+ {
+ ScriptReplicationDefinition[] scriptDefs = new ScriptReplicationDefinition[definitions.size()];
+ for(int i=0; i