diff --git a/TetherController.h b/TetherController.h
new file mode 100644
index 0000000..208780a
--- /dev/null
+++ b/TetherController.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _TETHER_CONTROLLER_H
+#define _TETHER_CONTROLLER_H
+
+#include <linux/in.h>
+
+#include <utils/List.h>
+
+typedef android::List<char *> InterfaceCollection;
+typedef android::List<struct in_addr> NetAddressCollection;
+
+class TetherController {
+    InterfaceCollection  *mInterfaces;
+    NetAddressCollection *mDnsForwarders;
+    pid_t                 mDaemonPid;
+    int                   mDaemonFd;
+
+public:
+    TetherController();
+    virtual ~TetherController();
+
+    int setIpFwdEnabled(bool enable);
+    bool getIpFwdEnabled();
+
+    int startTethering(struct in_addr dhcpStart, struct in_addr dhcpEnd);
+    int stopTethering();
+    bool isTetheringStarted();
+
+    int setDnsForwarders(char **servers, int numServers);
+    NetAddressCollection *getDnsForwarders();
+
+    int tetherInterface(const char *interface);
+    int untetherInterface(const char *interface);
+    InterfaceCollection *getTetheredInterfaceList();
+};
+
+#endif
