diff --git a/gdb/NEWS b/gdb/NEWS
index dddef6525de..1f2233082ae 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -101,6 +101,15 @@
      (gdb) disable $_hit_bpnum
   are both disabling the breakpoint.
 
+* For the break command, multiple uses of the 'thread' or 'task'
+  keywords will now given an error instead of just using the thread or
+  task id from the last instance of the keyword.
+
+* For the watch command, multiple uses of the 'task' keyword will now
+  given an error instead of just using the task id from the last
+  instance of the keyword.  The 'thread' keyword already gave an error
+  when used multiple times with the watch command.
+
 * New commands
 
 maintenance set ignore-prologue-end-flag on|off
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 2ec8ca364b6..bf99297a250 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -8793,6 +8793,9 @@ find_condition_and_thread (const char *tok, CORE_ADDR pc,
 	  const char *tmptok;
 	  struct thread_info *thr;
 
+	  if (*thread != -1)
+	    error(_("You can specify only one thread."));
+
 	  tok = end_tok + 1;
 	  thr = parse_thread_id (tok, &tmptok);
 	  if (tok == tmptok)
@@ -8804,6 +8807,9 @@ find_condition_and_thread (const char *tok, CORE_ADDR pc,
 	{
 	  char *tmptok;
 
+	  if (*task != 0)
+	    error(_("You can specify only one task."));
+
 	  tok = end_tok + 1;
 	  *task = strtol (tok, &tmptok, 0);
 	  if (tok == tmptok)
@@ -10086,6 +10092,9 @@ watch_command_1 (const char *arg, int accessflag, int from_tty,
 	    {
 	      char *tmp;
 
+	      if (task != 0)
+		error(_("You can specify only one task."));
+
 	      task = strtol (value_start, &tmp, 0);
 	      if (tmp == value_start)
 		error (_("Junk after task keyword."));
diff --git a/gdb/testsuite/gdb.ada/tasks.exp b/gdb/testsuite/gdb.ada/tasks.exp
index 2ca03396d7c..c2ab6c6724d 100644
--- a/gdb/testsuite/gdb.ada/tasks.exp
+++ b/gdb/testsuite/gdb.ada/tasks.exp
@@ -39,6 +39,10 @@ gdb_test "info tasks" \
                "\r\n"] \
          "info tasks before inserting breakpoint"
 
+# Check that multiple uses of the 'task' keyword will give an error.
+gdb_test "break break_me task 1 task 3" "You can specify only one task\\."
+gdb_test "watch j task 1 task 3" "You can specify only one task\\."
+
 # Insert a breakpoint that should stop only if task 1 stops.  Since
 # task 1 never calls break_me, this shouldn't actually ever trigger.
 # The fact that this breakpoint is created _before_ the next one
diff --git a/gdb/testsuite/gdb.linespec/keywords.exp b/gdb/testsuite/gdb.linespec/keywords.exp
index 94536df4670..dca854d3f59 100644
--- a/gdb/testsuite/gdb.linespec/keywords.exp
+++ b/gdb/testsuite/gdb.linespec/keywords.exp
@@ -80,8 +80,14 @@ foreach prefix {"" "thread 1 "} {
     foreach suffix {"" " " " thread 1"} {
 	foreach cond {"" " if 1"} {
 	    with_test_prefix "prefix: '$prefix', suffix: '$suffix', cond: '$cond'" {
-		gdb_breakpoint "main ${prefix}-force-condition${suffix}${cond}"\
-		    "message"
+
+		if { [regexp thread $prefix] && [regexp thread $suffix] } {
+		    gdb_test "break main ${prefix}-force-condition${suffix}${cond}" \
+			"You can specify only one thread\\."
+		} else {
+		    gdb_breakpoint "main ${prefix}-force-condition${suffix}${cond}"\
+			"message"
+		}
 	    }
 	}
     }
diff --git a/gdb/testsuite/gdb.threads/thread-specific-bp.exp b/gdb/testsuite/gdb.threads/thread-specific-bp.exp
index dc822f37b7b..a300f3ef7ab 100644
--- a/gdb/testsuite/gdb.threads/thread-specific-bp.exp
+++ b/gdb/testsuite/gdb.threads/thread-specific-bp.exp
@@ -63,6 +63,10 @@ proc check_thread_specific_breakpoint {non_stop} {
 	return -1
     }
 
+    # Check that multiple uses of 'thread' keyword give an error.
+    gdb_test "break main thread $start_thre thread $main_thre" \
+	"You can specify only one thread\\."
+
     # Set a thread-specific breakpoint at "main".  This can't ever
     # be hit, but that's OK.
     gdb_breakpoint "main thread $start_thre"
diff --git a/gdb/testsuite/gdb.threads/watchthreads2.exp b/gdb/testsuite/gdb.threads/watchthreads2.exp
index 2c18b20257c..ef502507f9f 100644
--- a/gdb/testsuite/gdb.threads/watchthreads2.exp
+++ b/gdb/testsuite/gdb.threads/watchthreads2.exp
@@ -73,6 +73,9 @@ if { $nr_started == $NR_THREADS } {
     return -1
 }
 
+# Check that multiple uses of the 'thread' keyword will give an error.
+gdb_test "watch x thread 1 thread 2" "You can specify only one thread\\."
+
 # Watch X, it will be modified by all threads.
 # We want this watchpoint to be set *after* all threads are running.
 gdb_test "watch x" "Hardware watchpoint 3: x"
