Index: src/main/resources/localization/Continuum.properties
===================================================================
--- src/main/resources/localization/Continuum.properties	(revision 757181)
+++ src/main/resources/localization/Continuum.properties	(working copy)
@@ -632,6 +632,7 @@
 schedule.available.buildqueues = --- Available Build Queues ---
 schedule.available.buildqueues.used = --- Used Build Queues ---
 schedule.buildqueues.add.error = Error attaching the build queue(s) to schedule.
+schedule.name.already.exists = A Schedule with the same name already exists
 
 # ----------------------------------------------------------------------
 # Page: SurefireReport
Index: src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java
===================================================================
--- src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java	(revision 757181)
+++ src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java	(working copy)
@@ -23,6 +23,7 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.BuildQueue;
 import org.apache.maven.continuum.model.project.Schedule;
@@ -215,7 +216,7 @@
             return REQUIRES_AUTHENTICATION;
         }
 
-        if ( ( "".equals( name ) ) || ( name == null ) )
+        if ( StringUtils.isBlank( name ) )
         {
             logger.error( "Can't create schedule. No schedule name was supplied." );
             addActionError( getText( "buildDefinition.noname.save.error.message" ) );
@@ -223,32 +224,45 @@
         }
         else
         {
-            if ( id == 0 )
+            try
             {
-                try
-                {
-                    getContinuum().addSchedule( setFields( new Schedule() ) );
-                }
-                catch ( ContinuumException e )
+                Schedule s = getContinuum().getScheduleByName( name );
+                if ( s != null && id != s.getId() )
                 {
-                    addActionError( getText( "schedule.buildqueues.add.error" ) );
+                    addActionError( getText( "schedule.name.already.exists" ) );
                     return ERROR;
                 }
-                return SUCCESS;
             }
-            else
+            catch ( ContinuumException e )
+            {
+                logger.debug( "Unexpected error getting schedule" );
+            }
+        }
+        if ( id == 0 )
+        {
+            try
             {
-                try
-                {
-                    getContinuum().updateSchedule( setFields( getContinuum().getSchedule( id ) ) );
-                }
-                catch ( ContinuumException e )
-                {
-                    addActionError( getText( "schedule.buildqueues.add.error" ) );
-                    return ERROR;
-                }
-                return SUCCESS;
+                getContinuum().addSchedule( setFields( new Schedule() ) );
+            }
+            catch ( ContinuumException e )
+            {
+                addActionError( getText( "schedule.buildqueues.add.error" ) );
+                return ERROR;
+            }
+            return SUCCESS;
+        }
+        else
+        {
+            try
+            {
+                getContinuum().updateSchedule( setFields( getContinuum().getSchedule( id ) ) );
             }
+            catch ( ContinuumException e )
+            {
+                addActionError( getText( "schedule.buildqueues.add.error" ) );
+                return ERROR;
+            }
+            return SUCCESS;
         }
     }
 
@@ -496,8 +510,7 @@
 
     private String getCronExpression()
     {
-        return ( second + " " + minute + " " + hour + " " + dayOfMonth + " " + month + " " + dayOfWeek + " " +
-            year ).trim();
+        return ( second + " " + minute + " " + hour + " " + dayOfMonth + " " + month + " " + dayOfWeek + " " + year ).trim();
     }
 
     public List<String> getAvailableBuildQueues()

