diff --git a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
index b71bc5e..13a9697 100644
--- a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
+++ b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
@@ -230,6 +230,9 @@
 
   public static final String AUTORESET_TO_ONE_MAPPER = "autoreset-to-one-mapper";
 
+  static final String HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED = "--incremental lastmodified option for hive imports is not "
+      + "supported. Please remove the parameter --incremental lastmodified.";
+
 
   public BaseSqoopTool() {
   }
@@ -1430,6 +1433,11 @@
       }
 
     if (options.doHiveImport()
+        && options.getIncrementalMode().equals(IncrementalMode.DateLastModified)) {
+      throw new InvalidOptionsException(HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED);
+    }
+
+    if (options.doHiveImport()
         && options.isAppendMode()
         && !options.getIncrementalMode().equals(IncrementalMode.AppendRows)) {
       throw new InvalidOptionsException("Append mode for hive imports is not "
diff --git a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
new file mode 100644
index 0000000..503a863
--- /dev/null
+++ b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
@@ -0,0 +1,92 @@
+package org.apache.sqoop.tool;
+
+import com.cloudera.sqoop.SqoopOptions;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class ImportToolValidateOptionsTest {
+
+  private static final String TABLE_NAME = "testTableName";
+  private static final String CONNECT_STRING = "testConnectString";
+  private static final String CHECK_COLUMN_NAME = "checkColumnName";
+
+  @Rule
+  public ExpectedException thrown = ExpectedException.none();
+
+  private ImportTool importTool;
+
+  @Before
+  public void setup() {
+    importTool = new ImportTool();
+    importTool.extraArguments = new String[0];
+  }
+
+  @Test
+  public void testValidationFailsWithHiveImportAndIncrementalLastmodified() throws Exception {
+    SqoopOptions options = buildBaseSqoopOptions();
+    options.setHiveImport(true);
+    options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+    options.setIncrementalMode(SqoopOptions.IncrementalMode.DateLastModified);
+
+    thrown.expect(SqoopOptions.InvalidOptionsException.class);
+    thrown.expectMessage(BaseSqoopTool.HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED);
+
+    importTool.validateOptions(options);
+  }
+
+  /**
+   * Note that append mode (--append) is designed to be used with HDFS import and not Hive import.
+   * However this test case is added to make sure that the error message generated is correct even if --append is used.
+   *
+   */
+  @Test
+  public void testValidationFailsWithHiveImportAndAppendModeIncrementalLastmodified() throws Exception {
+    SqoopOptions options = buildBaseSqoopOptions();
+    options.setHiveImport(true);
+    options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+    options.setIncrementalMode(SqoopOptions.IncrementalMode.DateLastModified);
+    options.setAppendMode(true);
+
+    thrown.expect(SqoopOptions.InvalidOptionsException.class);
+    thrown.expectMessage(BaseSqoopTool.HIVE_IMPORT_WITH_LASTMODIFIED_NOT_SUPPORTED);
+
+    importTool.validateOptions(options);
+  }
+
+  @Test
+  public void testValidationSucceedsWithHiveImportAndIncrementalAppendRows() throws Exception {
+    SqoopOptions options = buildBaseSqoopOptions();
+    options.setHiveImport(true);
+    options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+    options.setIncrementalMode(SqoopOptions.IncrementalMode.AppendRows);
+
+    importTool.validateOptions(options);
+  }
+
+  /**
+   * Note that append mode (--append) is designed to be used with HDFS import and not Hive import.
+   * However this test case is added to make sure that SQOOP-2986 does not break the already existing validation.
+   *
+   */
+  @Test
+  public void testValidationSucceedsWithHiveImportAndAppendModeAndIncrementalAppendRows() throws Exception {
+    SqoopOptions options = buildBaseSqoopOptions();
+    options.setHiveImport(true);
+    options.setIncrementalTestColumn(CHECK_COLUMN_NAME);
+    options.setIncrementalMode(SqoopOptions.IncrementalMode.AppendRows);
+    options.setAppendMode(true);
+
+    importTool.validateOptions(options);
+  }
+
+  private SqoopOptions buildBaseSqoopOptions() {
+    SqoopOptions result = new SqoopOptions();
+    result.setTableName(TABLE_NAME);
+    result.setConnectString(CONNECT_STRING);
+    return result;
+  }
+
+}
+
