Refactored Hyracks into runtime/dataflow-common/dataflow-std/server

git-svn-id: https://hyracks.googlecode.com/svn/trunk/hyracks@38 123451ca-8445-de46-9d55-352943316053
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java b/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/comm/FrameConstants.java
similarity index 72%
copy from hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java
copy to hyracks-api/src/main/java/edu/uci/ics/hyracks/api/comm/FrameConstants.java
index e526fa6..cc76bd4 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java
+++ b/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/comm/FrameConstants.java
@@ -12,10 +12,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package edu.uci.ics.hyracks.util;
+package edu.uci.ics.hyracks.api.comm;
 
-public interface ILifeCycle {
-    public void start() throws Exception;
+public interface FrameConstants {
+    public static final int SIZE_LEN = 4;
 
-    public void stop() throws Exception;
+    public static final boolean DEBUG_FRAME_IO = false;
+
+    public static final int FRAME_FIELD_MAGIC = 0x12345678;
 }
\ No newline at end of file
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java b/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/comm/FrameHelper.java
similarity index 72%
copy from hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java
copy to hyracks-api/src/main/java/edu/uci/ics/hyracks/api/comm/FrameHelper.java
index e526fa6..f08ea2a 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java
+++ b/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/comm/FrameHelper.java
@@ -12,10 +12,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package edu.uci.ics.hyracks.util;
+package edu.uci.ics.hyracks.api.comm;
 
-public interface ILifeCycle {
-    public void start() throws Exception;
+import edu.uci.ics.hyracks.api.context.IHyracksContext;
 
-    public void stop() throws Exception;
+public class FrameHelper {
+    public static int getTupleCountOffset(IHyracksContext ctx) {
+        return ctx.getFrameSize() - 4;
+    }
 }
\ No newline at end of file
diff --git a/hyracks-core/pom.xml b/hyracks-core/pom.xml
index 73a4cf6..e54a093 100644
--- a/hyracks-core/pom.xml
+++ b/hyracks-core/pom.xml
@@ -2,7 +2,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>edu.uci.ics.hyracks</groupId>
   <artifactId>hyracks-core</artifactId>
-  <version>0.0.5-SNAPSHOT</version>
+  <version>0.1.0</version>
   <build>
     <plugins>
       <plugin>
@@ -16,68 +16,12 @@
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>2.2</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <forkMode>pertest</forkMode>
           <argLine>-enableassertions</argLine>
         </configuration>
       </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>appassembler-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <configuration>
-              <programs>
-                <program>
-                  <mainClass>edu.uci.ics.hyracks.driver.CCDriver</mainClass>
-                  <name>hyrackscc</name>
-                </program>
-                <program>
-                  <mainClass>edu.uci.ics.hyracks.driver.NCDriver</mainClass>
-                  <name>hyracksnc</name>
-                </program>
-              </programs>
-              <repositoryLayout>flat</repositoryLayout>
-              <repositoryName>lib</repositoryName>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>assemble</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-                <descriptor>src/main/assembly/source-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
     </plugins>
   </build>
   <dependencies>
@@ -96,13 +40,6 @@
   		<scope>test</scope>
   	</dependency>
   	<dependency>
-  		<groupId>org.apache.hadoop</groupId>
-  		<artifactId>hadoop-core</artifactId>
-  		<version>0.20.2</version>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-  	<dependency>
   		<groupId>args4j</groupId>
   		<artifactId>args4j</artifactId>
   		<version>2.0.12</version>
@@ -123,13 +60,6 @@
   		<scope>compile</scope>
   	</dependency>
   	<dependency>
-  		<groupId>org.json</groupId>
-  		<artifactId>json</artifactId>
-  		<version>20090211</version>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-  	<dependency>
   		<groupId>jol</groupId>
   		<artifactId>jol</artifactId>
   		<version>1.0.0</version>
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/ConnectionManager.java b/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/ConnectionManager.java
index b161fe2..45c7221 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/ConnectionManager.java
+++ b/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/ConnectionManager.java
@@ -35,14 +35,14 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import edu.uci.ics.hyracks.api.comm.FrameConstants;
+import edu.uci.ics.hyracks.api.comm.FrameHelper;
 import edu.uci.ics.hyracks.api.comm.IConnectionEntry;
 import edu.uci.ics.hyracks.api.comm.IDataReceiveListener;
 import edu.uci.ics.hyracks.api.comm.IDataReceiveListenerFactory;
 import edu.uci.ics.hyracks.api.comm.IFrameWriter;
 import edu.uci.ics.hyracks.api.context.IHyracksContext;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.comm.io.FrameConstants;
-import edu.uci.ics.hyracks.comm.io.FrameHelper;
 
 public class ConnectionManager {
     private static final Logger LOGGER = Logger.getLogger(ConnectionManager.class.getName());
@@ -79,7 +79,7 @@
 
         if (LOGGER.isLoggable(Level.INFO)) {
             LOGGER.info("Connection manager listening on " + serverSocket.getInetAddress() + ":"
-                + serverSocket.getLocalPort());
+                    + serverSocket.getLocalPort());
         }
 
         pendingConnectionReceivers = new HashMap<UUID, IDataReceiveListenerFactory>();
@@ -120,7 +120,7 @@
     public IFrameWriter connect(NetworkAddress address, UUID id, int senderId) throws HyracksDataException {
         try {
             SocketChannel channel = SocketChannel
-                .open(new InetSocketAddress(address.getIpAddress(), address.getPort()));
+                    .open(new InetSocketAddress(address.getIpAddress(), address.getPort()));
             byte[] initialFrame = new byte[INITIAL_MESSAGE_LEN];
             ByteBuffer buffer = ByteBuffer.wrap(initialFrame);
             buffer.clear();
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/DemuxDataReceiveListenerFactory.java b/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/DemuxDataReceiveListenerFactory.java
index af7c6fc..403d4e8 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/DemuxDataReceiveListenerFactory.java
+++ b/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/DemuxDataReceiveListenerFactory.java
@@ -27,15 +27,13 @@
 import edu.uci.ics.hyracks.api.comm.IConnectionEntry;
 import edu.uci.ics.hyracks.api.comm.IDataReceiveListener;
 import edu.uci.ics.hyracks.api.comm.IDataReceiveListenerFactory;
-import edu.uci.ics.hyracks.api.comm.IFrameReader;
 import edu.uci.ics.hyracks.api.context.IHyracksContext;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
 
 public class DemuxDataReceiveListenerFactory implements IDataReceiveListenerFactory, IConnectionDemultiplexer,
-    IDataReceiveListener {
+        IDataReceiveListener {
     private static final Logger LOGGER = Logger.getLogger(DemuxDataReceiveListenerFactory.class.getName());
 
-    private final NonDeterministicFrameReader frameReader;
     private final IHyracksContext ctx;
     private final BitSet readyBits;
     private IConnectionEntry senders[];
@@ -44,7 +42,6 @@
     private UUID stageId;
 
     public DemuxDataReceiveListenerFactory(IHyracksContext ctx, UUID jobId, UUID stageId) {
-        frameReader = new NonDeterministicFrameReader(ctx, this);
         this.ctx = ctx;
         this.jobId = jobId;
         this.stageId = stageId;
@@ -60,10 +57,6 @@
         return this;
     }
 
-    public IFrameReader getFrameReader() {
-        return frameReader;
-    }
-
     @Override
     public synchronized void dataReceived(IConnectionEntry entry) throws IOException {
         int senderIndex = (Integer) entry.getAttachment();
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReadOperatorDescriptor.java b/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReadOperatorDescriptor.java
deleted file mode 100644
index fbdb630..0000000
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReadOperatorDescriptor.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * 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 from
- * 
- *     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.
- */
-package edu.uci.ics.hyracks.dataflow.std.hadoop;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.NetworkInterface;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.mapred.FileSplit;
-import org.apache.hadoop.mapred.InputFormat;
-import org.apache.hadoop.mapred.JobConf;
-import org.apache.hadoop.mapred.RecordReader;
-import org.apache.hadoop.mapred.Reporter;
-import org.apache.hadoop.mapred.SequenceFileRecordReader;
-import org.apache.hadoop.util.ReflectionUtils;
-
-import edu.uci.ics.hyracks.api.constraints.AbsoluteLocationConstraint;
-import edu.uci.ics.hyracks.api.constraints.ExplicitPartitionConstraint;
-import edu.uci.ics.hyracks.api.constraints.LocationConstraint;
-import edu.uci.ics.hyracks.api.constraints.PartitionConstraint;
-import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
-import edu.uci.ics.hyracks.api.job.JobSpecification;
-import edu.uci.ics.hyracks.config.NCConfig;
-import edu.uci.ics.hyracks.controller.clustercontroller.IClusterController;
-import edu.uci.ics.hyracks.controller.nodecontroller.INodeController;
-import edu.uci.ics.hyracks.dataflow.std.file.IRecordReader;
-import edu.uci.ics.hyracks.dataflow.std.hadoop.util.DatatypeHelper;
-import edu.uci.ics.hyracks.dataflow.std.hadoop.util.HadoopAdapter;
-import edu.uci.ics.hyracks.dataflow.std.hadoop.util.HadoopFileSplit;
-
-public class HadoopReadOperatorDescriptor extends AbstractHadoopFileScanOperatorDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    private String inputFormatClassName;
-    private Map<String, String> jobConfMap;
-
-    private static class HDFSCustomReader implements IRecordReader {
-        private RecordReader hadoopRecordReader;
-        private Class inputKeyClass;
-        private Class inputValueClass;
-        private Object key;
-        private Object value;
-
-        public HDFSCustomReader(Map<String, String> jobConfMap, HadoopFileSplit inputSplit,
-            String inputFormatClassName, Reporter reporter) {
-            try {
-                JobConf conf = DatatypeHelper.hashMap2JobConf((HashMap) jobConfMap);
-                FileSystem fileSystem = null;
-                try {
-                    fileSystem = FileSystem.get(conf);
-                } catch (IOException ioe) {
-                    ioe.printStackTrace();
-                }
-
-                Class inputFormatClass = Class.forName(inputFormatClassName);
-                InputFormat inputFormat = (InputFormat) ReflectionUtils.newInstance(inputFormatClass, conf);
-                hadoopRecordReader = (RecordReader) inputFormat.getRecordReader(getFileSplit(inputSplit), conf,
-                    reporter);
-                if (hadoopRecordReader instanceof SequenceFileRecordReader) {
-                    inputKeyClass = ((SequenceFileRecordReader) hadoopRecordReader).getKeyClass();
-                    inputValueClass = ((SequenceFileRecordReader) hadoopRecordReader).getValueClass();
-                } else {
-                    inputKeyClass = hadoopRecordReader.createKey().getClass();
-                    inputValueClass = hadoopRecordReader.createValue().getClass();
-                }
-                key = inputKeyClass.newInstance();
-                value = inputValueClass.newInstance();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        public Class getInputKeyClass() {
-            return inputKeyClass;
-        }
-
-        public void setInputKeyClass(Class inputKeyClass) {
-            this.inputKeyClass = inputKeyClass;
-        }
-
-        public Class getInputValueClass() {
-            return inputValueClass;
-        }
-
-        public void setInputValueClass(Class inputValueClass) {
-            this.inputValueClass = inputValueClass;
-        }
-
-        @Override
-        public void close() {
-            try {
-                hadoopRecordReader.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-
-        @Override
-        public boolean read(Object[] record) throws Exception {
-            if (!hadoopRecordReader.next(key, value)) {
-                return false;
-            }
-            if (record.length == 1) {
-                record[0] = value;
-            } else {
-                record[0] = key;
-                record[1] = value;
-            }
-            return true;
-        }
-
-        private FileSplit getFileSplit(HadoopFileSplit hadoopFileSplit) {
-            FileSplit fileSplit = new FileSplit(new Path(hadoopFileSplit.getFile()), hadoopFileSplit.getStart(),
-                hadoopFileSplit.getLength(), hadoopFileSplit.getHosts());
-            return fileSplit;
-        }
-    }
-
-    public HadoopReadOperatorDescriptor(Map<String, String> jobConfMap, JobSpecification spec,
-        HadoopFileSplit[] splits, String inputFormatClassName, RecordDescriptor recordDescriptor) {
-        super(spec, splits, recordDescriptor);
-        this.inputFormatClassName = inputFormatClassName;
-        this.jobConfMap = jobConfMap;
-    }
-
-    public HadoopReadOperatorDescriptor(Map<String, String> jobConfMap, InetSocketAddress nameNode,
-        JobSpecification spec, String inputFormatClassName, RecordDescriptor recordDescriptor) {
-        super(spec, null, recordDescriptor);
-        this.inputFormatClassName = inputFormatClassName;
-        this.jobConfMap = jobConfMap;
-    }
-
-    public HadoopReadOperatorDescriptor(IClusterController clusterController, Map<String, String> jobConfMap,
-        JobSpecification spec, String fileSystemURL, String inputFormatClassName, RecordDescriptor recordDescriptor) {
-        super(spec, null, recordDescriptor);
-        HadoopAdapter hadoopAdapter = HadoopAdapter.getInstance(fileSystemURL);
-        String inputPathString = jobConfMap.get("mapred.input.dir");
-        String[] inputPaths = inputPathString.split(",");
-        Map<String, List<HadoopFileSplit>> blocksToRead = hadoopAdapter.getInputSplits(inputPaths);
-        List<HadoopFileSplit> hadoopFileSplits = new ArrayList<HadoopFileSplit>();
-        for (String filePath : blocksToRead.keySet()) {
-            hadoopFileSplits.addAll(blocksToRead.get(filePath));
-        }
-        for (HadoopFileSplit hadoopFileSplit : hadoopFileSplits) {
-            System.out.println(" Hadoop File Split : " + hadoopFileSplit);
-        }
-        super.splits = hadoopFileSplits.toArray(new HadoopFileSplit[] {});
-        configurePartitionConstraints(clusterController, blocksToRead);
-        this.inputFormatClassName = inputFormatClassName;
-        this.jobConfMap = jobConfMap;
-    }
-
-    private void configurePartitionConstraints(IClusterController clusterController,
-        Map<String, List<HadoopFileSplit>> blocksToRead) {
-        List<LocationConstraint> locationConstraints = new ArrayList<LocationConstraint>();
-        Map<String, INodeController> registry = null;
-        try {
-            // registry = clusterController.getRegistry();
-            // TODO
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        Map<String, String> hostnameToNodeIdMap = new HashMap<String, String>();
-        NCConfig ncConfig = null;
-        for (String nodeId : registry.keySet()) {
-            try {
-                ncConfig = ((INodeController) registry.get(nodeId)).getConfiguration();
-                String ipAddress = ncConfig.dataIPAddress;
-                String hostname = InetAddress.getByName(ipAddress).getHostName();
-                System.out.println(" hostname :" + hostname + " nodeid:" + nodeId);
-                hostnameToNodeIdMap.put(hostname, nodeId);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        for (String filePath : blocksToRead.keySet()) {
-            List<HadoopFileSplit> hadoopFileSplits = blocksToRead.get(filePath);
-            for (HadoopFileSplit hadoopFileSplit : hadoopFileSplits) {
-                String hostname = hadoopFileSplit.getHosts()[0];
-                System.out.println("host name is :" + hostname);
-                InetAddress address = null;
-                try {
-                    address = InetAddress.getByName(hostname);
-                    if (address.isLoopbackAddress()) {
-                        Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
-                        while (netInterfaces.hasMoreElements()) {
-                            NetworkInterface ni = netInterfaces.nextElement();
-                            InetAddress inetAddress = (InetAddress) ni.getInetAddresses().nextElement();
-                            if (!inetAddress.isLoopbackAddress()) {
-                                address = inetAddress;
-                                break;
-                            }
-                        }
-                    }
-                    hostname = address.getHostName();
-                    System.out.println("cannonical host name hyracks :" + hostname);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-                String nodeId = hostnameToNodeIdMap.get(hostname);
-                System.out.println(" corresponding node id is :" + nodeId);
-                LocationConstraint locationConstraint = new AbsoluteLocationConstraint(nodeId);
-                locationConstraints.add(locationConstraint);
-            }
-        }
-
-        PartitionConstraint partitionConstraint = new ExplicitPartitionConstraint(locationConstraints
-            .toArray(new LocationConstraint[] {}));
-        this.setPartitionConstraint(partitionConstraint);
-    }
-
-    @Override
-    protected IRecordReader createRecordReader(HadoopFileSplit fileSplit, RecordDescriptor desc) throws Exception {
-        Reporter reporter = createReporter();
-        IRecordReader recordReader = new HDFSCustomReader(jobConfMap, fileSplit, inputFormatClassName, reporter);
-        return recordReader;
-    }
-}
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java b/hyracks-core/src/main/java/edu/uci/ics/hyracks/service/ILifeCycle.java
similarity index 95%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java
rename to hyracks-core/src/main/java/edu/uci/ics/hyracks/service/ILifeCycle.java
index e526fa6..e73f5b0 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ILifeCycle.java
+++ b/hyracks-core/src/main/java/edu/uci/ics/hyracks/service/ILifeCycle.java
@@ -12,7 +12,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package edu.uci.ics.hyracks.util;
+package edu.uci.ics.hyracks.service;
 
 public interface ILifeCycle {
     public void start() throws Exception;
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/service/IService.java b/hyracks-core/src/main/java/edu/uci/ics/hyracks/service/IService.java
index edfdc83..aaf7e0e 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/service/IService.java
+++ b/hyracks-core/src/main/java/edu/uci/ics/hyracks/service/IService.java
@@ -14,7 +14,6 @@
  */
 package edu.uci.ics.hyracks.service;
 
-import edu.uci.ics.hyracks.util.ILifeCycle;
 
 public interface IService extends ILifeCycle {
 }
\ No newline at end of file
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/PropertiesAccess.java b/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/PropertiesAccess.java
deleted file mode 100644
index 3e01dc9..0000000
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/PropertiesAccess.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * 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 from
- * 
- *     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.
- */
-package edu.uci.ics.hyracks.util;
-
-import java.util.Properties;
-
-public class PropertiesAccess {
-    public static boolean safeBoolean(Properties props, String pName, boolean defaultValue) {
-        String pValue = props.getProperty(pName);
-        if (pValue == null) {
-            return defaultValue;
-        }
-        try {
-            return Boolean.parseBoolean(pValue);
-        } catch (Exception e) {
-            return defaultValue;
-        }
-    }
-
-    public static String safeString(Properties props, String pName, String defaultValue) {
-        String pValue = props.getProperty(pName);
-        if (pValue == null) {
-            return defaultValue;
-        }
-        return pValue;
-    }
-
-    public static int safeInt(Properties props, String pName, int defaultValue) {
-        String pValue = props.getProperty(pName);
-        if (pValue == null) {
-            return defaultValue;
-        }
-        try {
-            return Integer.parseInt(pValue);
-        } catch (Exception e) {
-            return defaultValue;
-        }
-    }
-}
\ No newline at end of file
diff --git a/hyracks-dataflow-common/.classpath b/hyracks-dataflow-common/.classpath
new file mode 100644
index 0000000..86f50f4
--- /dev/null
+++ b/hyracks-dataflow-common/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/hyracks-dataflow-common/.project b/hyracks-dataflow-common/.project
new file mode 100644
index 0000000..8fd9acf
--- /dev/null
+++ b/hyracks-dataflow-common/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>hyracks-dataflow-common</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/hyracks-dataflow-common/.settings/org.eclipse.jdt.core.prefs b/hyracks-dataflow-common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8496bf4
--- /dev/null
+++ b/hyracks-dataflow-common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,6 @@
+#Thu Jul 29 14:49:35 PDT 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/hyracks-dataflow-common/.settings/org.maven.ide.eclipse.prefs b/hyracks-dataflow-common/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..c411710
--- /dev/null
+++ b/hyracks-dataflow-common/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Thu Jul 29 14:49:35 PDT 2010
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/hyracks-dataflow-common/pom.xml b/hyracks-dataflow-common/pom.xml
new file mode 100644
index 0000000..589e93f
--- /dev/null
+++ b/hyracks-dataflow-common/pom.xml
@@ -0,0 +1,28 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>edu.uci.ics.hyracks</groupId>
+  <artifactId>hyracks-dataflow-common</artifactId>
+  <version>0.1.0</version>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.0.2</version>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+  	<dependency>
+  		<groupId>edu.uci.ics.hyracks</groupId>
+  		<artifactId>hyracks-api</artifactId>
+  		<version>0.1.0</version>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  </dependencies>
+</project>
diff --git a/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/ConnectionEntry.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/ConnectionEntry.java
new file mode 100644
index 0000000..bfc79e7
--- /dev/null
+++ b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/ConnectionEntry.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.hyracks.comm;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.SocketChannel;
+import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import edu.uci.ics.hyracks.api.comm.IConnectionEntry;
+import edu.uci.ics.hyracks.api.comm.IDataReceiveListener;
+import edu.uci.ics.hyracks.api.context.IHyracksContext;
+
+public class ConnectionEntry implements IConnectionEntry {
+    private static final Logger LOGGER = Logger.getLogger(ConnectionEntry.class.getName());
+
+    private SocketChannel socketChannel;
+
+    private final ByteBuffer readBuffer;
+
+    private final ByteBuffer writeBuffer;
+
+    private IDataReceiveListener recvListener;
+
+    private Object attachment;
+
+    private final SelectionKey key;
+
+    private UUID jobId;
+
+    private UUID stageId;
+
+    private boolean aborted;
+
+    public ConnectionEntry(IHyracksContext ctx, SocketChannel socketChannel, SelectionKey key) {
+        this.socketChannel = socketChannel;
+        readBuffer = ctx.getResourceManager().allocateFrame();
+        readBuffer.clear();
+        writeBuffer = ctx.getResourceManager().allocateFrame();
+        writeBuffer.clear();
+        this.key = key;
+    }
+
+    public SocketChannel getSocketChannel() {
+        return socketChannel;
+    }
+
+    public boolean dispatch(SelectionKey key) throws IOException {
+        if (aborted) {
+            recvListener.dataReceived(this);
+        } else {
+            if (key.isReadable()) {
+                if (LOGGER.isLoggable(Level.FINER)) {
+                    LOGGER.finer("Before read: " + readBuffer.position() + " " + readBuffer.limit());
+                }
+                int bytesRead = socketChannel.read(readBuffer);
+                if (bytesRead < 0) {
+                    recvListener.eos(this);
+                    return true;
+                }
+                if (LOGGER.isLoggable(Level.FINER)) {
+                    LOGGER.finer("After read: " + readBuffer.position() + " " + readBuffer.limit());
+                }
+                recvListener.dataReceived(this);
+            } else if (key.isWritable()) {
+                synchronized (this) {
+                    writeBuffer.flip();
+                    if (LOGGER.isLoggable(Level.FINER)) {
+                        LOGGER.finer("Before write: " + writeBuffer.position() + " " + writeBuffer.limit());
+                    }
+                    int bytesWritten = socketChannel.write(writeBuffer);
+                    if (bytesWritten < 0) {
+                        return true;
+                    }
+                    if (LOGGER.isLoggable(Level.FINER)) {
+                        LOGGER.finer("After write: " + writeBuffer.position() + " " + writeBuffer.limit());
+                    }
+                    if (writeBuffer.remaining() <= 0) {
+                        int ops = key.interestOps();
+                        key.interestOps(ops & ~SelectionKey.OP_WRITE);
+                    }
+                    writeBuffer.compact();
+                    notifyAll();
+                }
+            } else {
+                LOGGER.warning("Spurious event triggered: " + key.readyOps());
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public ByteBuffer getReadBuffer() {
+        return readBuffer;
+    }
+
+    @Override
+    public synchronized void write(ByteBuffer buffer) {
+        while (buffer.remaining() > 0) {
+            while (writeBuffer.remaining() <= 0) {
+                try {
+                    wait();
+                } catch (InterruptedException e) {
+                }
+            }
+            int oldLimit = buffer.limit();
+            buffer.limit(Math.min(oldLimit, writeBuffer.remaining()));
+            writeBuffer.put(buffer);
+            buffer.limit(oldLimit);
+            int ops = key.interestOps();
+            key.interestOps(ops | SelectionKey.OP_WRITE);
+            key.selector().wakeup();
+        }
+    }
+
+    @Override
+    public void setDataReceiveListener(IDataReceiveListener listener) {
+        this.recvListener = listener;
+    }
+
+    @Override
+    public void attach(Object attachment) {
+        this.attachment = attachment;
+    }
+
+    @Override
+    public Object getAttachment() {
+        return attachment;
+    }
+
+    @Override
+    public void close() {
+        try {
+            socketChannel.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public SelectionKey getSelectionKey() {
+        return key;
+    }
+
+    @Override
+    public UUID getJobId() {
+        return jobId;
+    }
+
+    @Override
+    public void setJobId(UUID jobId) {
+        this.jobId = jobId;
+    }
+
+    @Override
+    public UUID getStageId() {
+        return stageId;
+    }
+
+    @Override
+    public void setStageId(UUID stageId) {
+        this.stageId = stageId;
+    }
+
+    @Override
+    public void abort() {
+        aborted = true;
+    }
+
+    @Override
+    public boolean aborted() {
+        return aborted;
+    }
+}
\ No newline at end of file
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/NonDeterministicFrameReader.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/NonDeterministicFrameReader.java
similarity index 98%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/NonDeterministicFrameReader.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/NonDeterministicFrameReader.java
index 0ddc5d6..96fb70a 100644
--- a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/NonDeterministicFrameReader.java
+++ b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/NonDeterministicFrameReader.java
@@ -18,12 +18,12 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import edu.uci.ics.hyracks.api.comm.FrameHelper;
 import edu.uci.ics.hyracks.api.comm.IConnectionDemultiplexer;
 import edu.uci.ics.hyracks.api.comm.IConnectionEntry;
 import edu.uci.ics.hyracks.api.comm.IFrameReader;
 import edu.uci.ics.hyracks.api.context.IHyracksContext;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.comm.io.FrameHelper;
 
 public class NonDeterministicFrameReader implements IFrameReader {
     private static final Logger LOGGER = Logger.getLogger(NonDeterministicFrameReader.class.getName());
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/SortMergeFrameReader.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/SortMergeFrameReader.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/SortMergeFrameReader.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/SortMergeFrameReader.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/ArrayTupleBuilder.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/ArrayTupleBuilder.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/ArrayTupleBuilder.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/ArrayTupleBuilder.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/ByteArrayAccessibleOutputStream.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/ByteArrayAccessibleOutputStream.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/ByteArrayAccessibleOutputStream.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/ByteArrayAccessibleOutputStream.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameConstants.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameConstants.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameConstants.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameConstants.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializer.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializer.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializer.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializer.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataReader.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataReader.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataReader.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataReader.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataWriter.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataWriter.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataWriter.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameDeserializingDataWriter.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameHelper.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameHelper.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameHelper.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameHelper.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAccessor.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAccessor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAccessor.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAccessor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAppender.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAppender.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAppender.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTupleAppender.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTuplePairComparator.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTuplePairComparator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTuplePairComparator.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/FrameTuplePairComparator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/SerializingDataWriter.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/SerializingDataWriter.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/io/SerializingDataWriter.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/io/SerializingDataWriter.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/util/ByteBufferInputStream.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/util/ByteBufferInputStream.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/util/ByteBufferInputStream.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/util/ByteBufferInputStream.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/util/FrameUtils.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/util/FrameUtils.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/comm/util/FrameUtils.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/comm/util/FrameUtils.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ReflectionUtils.java b/hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/util/ReflectionUtils.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/util/ReflectionUtils.java
rename to hyracks-dataflow-common/src/main/java/edu/uci/ics/hyracks/util/ReflectionUtils.java
diff --git a/hyracks-dataflow-std/.classpath b/hyracks-dataflow-std/.classpath
new file mode 100644
index 0000000..1f3c1ff
--- /dev/null
+++ b/hyracks-dataflow-std/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/hyracks-dataflow-std/.project b/hyracks-dataflow-std/.project
new file mode 100644
index 0000000..1101a65
--- /dev/null
+++ b/hyracks-dataflow-std/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>hyracks-dataflow-std</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/hyracks-dataflow-std/.settings/org.eclipse.jdt.core.prefs b/hyracks-dataflow-std/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..1ca1bd4
--- /dev/null
+++ b/hyracks-dataflow-std/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,6 @@
+#Thu Jul 29 14:32:56 PDT 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/hyracks-dataflow-std/.settings/org.maven.ide.eclipse.prefs b/hyracks-dataflow-std/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..e96df89
--- /dev/null
+++ b/hyracks-dataflow-std/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Thu Jul 29 14:32:56 PDT 2010
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/hyracks-dataflow-std/pom.xml b/hyracks-dataflow-std/pom.xml
new file mode 100644
index 0000000..9d720b3
--- /dev/null
+++ b/hyracks-dataflow-std/pom.xml
@@ -0,0 +1,48 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>edu.uci.ics.hyracks</groupId>
+  <artifactId>hyracks-dataflow-std</artifactId>
+  <version>0.1.0</version>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.0.2</version>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+  	<dependency>
+  		<groupId>edu.uci.ics.hyracks</groupId>
+  		<artifactId>hyracks-api</artifactId>
+  		<version>0.1.0</version>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>edu.uci.ics.hyracks</groupId>
+  		<artifactId>hyracks-dataflow-common</artifactId>
+  		<version>0.1.0</version>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>org.apache.hadoop</groupId>
+  		<artifactId>hadoop-core</artifactId>
+  		<version>0.20.2</version>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>edu.uci.ics.dcache</groupId>
+  		<artifactId>dcache-client</artifactId>
+  		<version>0.0.1</version>
+  		<scope>compile</scope>
+  	</dependency>
+  </dependencies>
+</project>
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/ExternalSortOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/ExternalSortOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/ExternalSortOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/ExternalSortOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/FieldHashPartitionComputerFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/FieldHashPartitionComputerFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/FieldHashPartitionComputerFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/FieldHashPartitionComputerFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/HashDataWriter.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/HashDataWriter.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/HashDataWriter.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/HashDataWriter.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapper.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapper.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapper.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapper.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapperFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapperFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapperFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/IMapperFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/ITupleAggregatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/InMemorySortOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/InMemorySortOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/InMemorySortOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/InMemorySortOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningConnectorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningConnectorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningConnectorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningConnectorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningMergingConnectorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningMergingConnectorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningMergingConnectorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNHashPartitioningMergingConnectorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNRangePartitioningConnectorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNRangePartitioningConnectorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNRangePartitioningConnectorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNRangePartitioningConnectorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNReplicatingConnectorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNReplicatingConnectorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNReplicatingConnectorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MToNReplicatingConnectorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MapperOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MapperOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MapperOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MapperOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MaterializingOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MaterializingOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/MaterializingOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/MaterializingOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/OneToOneConnectorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/OneToOneConnectorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/OneToOneConnectorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/OneToOneConnectorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/PrinterOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/PrinterOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/PrinterOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/PrinterOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/RepartitionComputerFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/RepartitionComputerFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/RepartitionComputerFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/RepartitionComputerFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/SplitVectorOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/SplitVectorOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/SplitVectorOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/SplitVectorOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/ReflectionBasedTupleAggregatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/ReflectionBasedTupleAggregatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/ReflectionBasedTupleAggregatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/ReflectionBasedTupleAggregatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumGroupAggregator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumGroupAggregator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumGroupAggregator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumGroupAggregator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumStringGroupAggregator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumStringGroupAggregator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumStringGroupAggregator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumStringGroupAggregator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumTupleAggregator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumTupleAggregator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumTupleAggregator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/aggregators/SumTupleAggregator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractActivityNode.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractActivityNode.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractActivityNode.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractActivityNode.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractConnectorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractConnectorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractConnectorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractConnectorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractSingleActivityOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractSingleActivityOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractSingleActivityOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/AbstractSingleActivityOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/IOpenableDataWriterOperator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/IOpenableDataWriterOperator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/IOpenableDataWriterOperator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/base/IOpenableDataWriterOperator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryHashFunctionFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryHashFunctionFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryHashFunctionFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatBinaryHashFunctionFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatHashFunctionFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatHashFunctionFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatHashFunctionFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatHashFunctionFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatSerializerDeserializer.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatSerializerDeserializer.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatSerializerDeserializer.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/FloatSerializerDeserializer.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntArraySerializerDeserializer.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntArraySerializerDeserializer.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntArraySerializerDeserializer.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntArraySerializerDeserializer.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryHashFunctionFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryHashFunctionFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryHashFunctionFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerBinaryHashFunctionFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerHashFunctionFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerHashFunctionFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerHashFunctionFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerHashFunctionFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerSerializerDeserializer.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerSerializerDeserializer.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerSerializerDeserializer.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/IntegerSerializerDeserializer.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryHashFunctionFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryHashFunctionFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryHashFunctionFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringBinaryHashFunctionFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringHashFunctionFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringHashFunctionFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringHashFunctionFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringHashFunctionFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringSerializerDeserializer.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringSerializerDeserializer.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringSerializerDeserializer.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringSerializerDeserializer.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringUtils.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringUtils.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringUtils.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/data/StringUtils.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileScanOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileScanOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileScanOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileScanOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileWriteOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileWriteOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileWriteOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/AbstractFileWriteOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/CSVFileScanOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/CSVFileScanOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/CSVFileScanOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/CSVFileScanOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/FileSplit.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/FileSplit.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/FileSplit.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/FileSplit.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordReader.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordReader.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordReader.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordReader.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordWriter.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordWriter.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordWriter.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/IRecordWriter.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileScanOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileScanOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileScanOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileScanOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileWriteOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileWriteOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileWriteOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/LineFileWriteOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordFileScanOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordFileScanOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordFileScanOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordFileScanOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordReader.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordReader.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordReader.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordReader.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordWriter.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordWriter.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordWriter.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/file/RecordWriter.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/GroupingHashTable.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/GroupingHashTable.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/GroupingHashTable.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/GroupingHashTable.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/HashGroupOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/HashGroupOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/HashGroupOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/HashGroupOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IAccumulatingAggregatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IGroupAggregator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IGroupAggregator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IGroupAggregator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/IGroupAggregator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperator.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperator.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperator.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperator.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/PreclusteredGroupOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopFileScanOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopFileScanOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopFileScanOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopFileScanOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/AbstractHadoopOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HDFSWriteOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HDFSWriteOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HDFSWriteOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HDFSWriteOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopMapperOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopMapperOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopMapperOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopMapperOperatorDescriptor.java
diff --git a/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReadOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReadOperatorDescriptor.java
new file mode 100644
index 0000000..3aa5c1a
--- /dev/null
+++ b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReadOperatorDescriptor.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.hyracks.dataflow.std.hadoop;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.NetworkInterface;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.mapred.FileSplit;
+import org.apache.hadoop.mapred.InputFormat;
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.RecordReader;
+import org.apache.hadoop.mapred.Reporter;
+import org.apache.hadoop.mapred.SequenceFileRecordReader;
+import org.apache.hadoop.util.ReflectionUtils;
+
+import edu.uci.ics.hyracks.api.constraints.AbsoluteLocationConstraint;
+import edu.uci.ics.hyracks.api.constraints.ExplicitPartitionConstraint;
+import edu.uci.ics.hyracks.api.constraints.LocationConstraint;
+import edu.uci.ics.hyracks.api.constraints.PartitionConstraint;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.dataflow.std.file.IRecordReader;
+import edu.uci.ics.hyracks.dataflow.std.hadoop.util.DatatypeHelper;
+import edu.uci.ics.hyracks.dataflow.std.hadoop.util.HadoopAdapter;
+import edu.uci.ics.hyracks.dataflow.std.hadoop.util.HadoopFileSplit;
+
+public class HadoopReadOperatorDescriptor extends AbstractHadoopFileScanOperatorDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    private String inputFormatClassName;
+    private Map<String, String> jobConfMap;
+
+    private static class HDFSCustomReader implements IRecordReader {
+        private RecordReader hadoopRecordReader;
+        private Class inputKeyClass;
+        private Class inputValueClass;
+        private Object key;
+        private Object value;
+
+        public HDFSCustomReader(Map<String, String> jobConfMap, HadoopFileSplit inputSplit,
+                String inputFormatClassName, Reporter reporter) {
+            try {
+                JobConf conf = DatatypeHelper.hashMap2JobConf((HashMap) jobConfMap);
+                FileSystem fileSystem = null;
+                try {
+                    fileSystem = FileSystem.get(conf);
+                } catch (IOException ioe) {
+                    ioe.printStackTrace();
+                }
+
+                Class inputFormatClass = Class.forName(inputFormatClassName);
+                InputFormat inputFormat = (InputFormat) ReflectionUtils.newInstance(inputFormatClass, conf);
+                hadoopRecordReader = (RecordReader) inputFormat.getRecordReader(getFileSplit(inputSplit), conf,
+                        reporter);
+                if (hadoopRecordReader instanceof SequenceFileRecordReader) {
+                    inputKeyClass = ((SequenceFileRecordReader) hadoopRecordReader).getKeyClass();
+                    inputValueClass = ((SequenceFileRecordReader) hadoopRecordReader).getValueClass();
+                } else {
+                    inputKeyClass = hadoopRecordReader.createKey().getClass();
+                    inputValueClass = hadoopRecordReader.createValue().getClass();
+                }
+                key = inputKeyClass.newInstance();
+                value = inputValueClass.newInstance();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        public Class getInputKeyClass() {
+            return inputKeyClass;
+        }
+
+        public void setInputKeyClass(Class inputKeyClass) {
+            this.inputKeyClass = inputKeyClass;
+        }
+
+        public Class getInputValueClass() {
+            return inputValueClass;
+        }
+
+        public void setInputValueClass(Class inputValueClass) {
+            this.inputValueClass = inputValueClass;
+        }
+
+        @Override
+        public void close() {
+            try {
+                hadoopRecordReader.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        @Override
+        public boolean read(Object[] record) throws Exception {
+            if (!hadoopRecordReader.next(key, value)) {
+                return false;
+            }
+            if (record.length == 1) {
+                record[0] = value;
+            } else {
+                record[0] = key;
+                record[1] = value;
+            }
+            return true;
+        }
+
+        private FileSplit getFileSplit(HadoopFileSplit hadoopFileSplit) {
+            FileSplit fileSplit = new FileSplit(new Path(hadoopFileSplit.getFile()), hadoopFileSplit.getStart(),
+                    hadoopFileSplit.getLength(), hadoopFileSplit.getHosts());
+            return fileSplit;
+        }
+    }
+
+    public HadoopReadOperatorDescriptor(Map<String, String> jobConfMap, JobSpecification spec,
+            HadoopFileSplit[] splits, String inputFormatClassName, RecordDescriptor recordDescriptor) {
+        super(spec, splits, recordDescriptor);
+        this.inputFormatClassName = inputFormatClassName;
+        this.jobConfMap = jobConfMap;
+    }
+
+    public HadoopReadOperatorDescriptor(Map<String, String> jobConfMap, InetSocketAddress nameNode,
+            JobSpecification spec, String inputFormatClassName, RecordDescriptor recordDescriptor) {
+        super(spec, null, recordDescriptor);
+        this.inputFormatClassName = inputFormatClassName;
+        this.jobConfMap = jobConfMap;
+    }
+
+    // public HadoopReadOperatorDescriptor(IClusterController clusterController, Map<String, String> jobConfMap,
+    // JobSpecification spec, String fileSystemURL, String inputFormatClassName, RecordDescriptor recordDescriptor) {
+    // super(spec, null, recordDescriptor);
+    // HadoopAdapter hadoopAdapter = HadoopAdapter.getInstance(fileSystemURL);
+    // String inputPathString = jobConfMap.get("mapred.input.dir");
+    // String[] inputPaths = inputPathString.split(",");
+    // Map<String, List<HadoopFileSplit>> blocksToRead = hadoopAdapter.getInputSplits(inputPaths);
+    // List<HadoopFileSplit> hadoopFileSplits = new ArrayList<HadoopFileSplit>();
+    // for (String filePath : blocksToRead.keySet()) {
+    // hadoopFileSplits.addAll(blocksToRead.get(filePath));
+    // }
+    // for (HadoopFileSplit hadoopFileSplit : hadoopFileSplits) {
+    // System.out.println(" Hadoop File Split : " + hadoopFileSplit);
+    // }
+    // super.splits = hadoopFileSplits.toArray(new HadoopFileSplit[] {});
+    // configurePartitionConstraints(clusterController, blocksToRead);
+    // this.inputFormatClassName = inputFormatClassName;
+    // this.jobConfMap = jobConfMap;
+    // }
+
+    // private void configurePartitionConstraints(IClusterController clusterController,
+    // Map<String, List<HadoopFileSplit>> blocksToRead) {
+    // List<LocationConstraint> locationConstraints = new ArrayList<LocationConstraint>();
+    // Map<String, INodeController> registry = null;
+    // try {
+    // // registry = clusterController.getRegistry();
+    // // TODO
+    // } catch (Exception e) {
+    // e.printStackTrace();
+    // }
+    // Map<String, String> hostnameToNodeIdMap = new HashMap<String, String>();
+    // NCConfig ncConfig = null;
+    // for (String nodeId : registry.keySet()) {
+    // try {
+    // ncConfig = ((INodeController) registry.get(nodeId)).getConfiguration();
+    // String ipAddress = ncConfig.dataIPAddress;
+    // String hostname = InetAddress.getByName(ipAddress).getHostName();
+    // System.out.println(" hostname :" + hostname + " nodeid:" + nodeId);
+    // hostnameToNodeIdMap.put(hostname, nodeId);
+    // } catch (Exception e) {
+    // e.printStackTrace();
+    // }
+    // }
+    //
+    // for (String filePath : blocksToRead.keySet()) {
+    // List<HadoopFileSplit> hadoopFileSplits = blocksToRead.get(filePath);
+    // for (HadoopFileSplit hadoopFileSplit : hadoopFileSplits) {
+    // String hostname = hadoopFileSplit.getHosts()[0];
+    // System.out.println("host name is :" + hostname);
+    // InetAddress address = null;
+    // try {
+    // address = InetAddress.getByName(hostname);
+    // if (address.isLoopbackAddress()) {
+    // Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
+    // while (netInterfaces.hasMoreElements()) {
+    // NetworkInterface ni = netInterfaces.nextElement();
+    // InetAddress inetAddress = (InetAddress) ni.getInetAddresses().nextElement();
+    // if (!inetAddress.isLoopbackAddress()) {
+    // address = inetAddress;
+    // break;
+    // }
+    // }
+    // }
+    // hostname = address.getHostName();
+    // System.out.println("cannonical host name hyracks :" + hostname);
+    // } catch (Exception e) {
+    // e.printStackTrace();
+    // }
+    // String nodeId = hostnameToNodeIdMap.get(hostname);
+    // System.out.println(" corresponding node id is :" + nodeId);
+    // LocationConstraint locationConstraint = new AbsoluteLocationConstraint(nodeId);
+    // locationConstraints.add(locationConstraint);
+    // }
+    // }
+    //
+    // PartitionConstraint partitionConstraint = new ExplicitPartitionConstraint(locationConstraints
+    // .toArray(new LocationConstraint[] {}));
+    // this.setPartitionConstraint(partitionConstraint);
+    // }
+
+    @Override
+    protected IRecordReader createRecordReader(HadoopFileSplit fileSplit, RecordDescriptor desc) throws Exception {
+        Reporter reporter = createReporter();
+        IRecordReader recordReader = new HDFSCustomReader(jobConfMap, fileSplit, inputFormatClassName, reporter);
+        return recordReader;
+    }
+}
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReducerOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReducerOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReducerOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/HadoopReducerOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/AbstractClassBasedDelegate.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/AbstractClassBasedDelegate.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/AbstractClassBasedDelegate.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/AbstractClassBasedDelegate.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopHashTuplePartitionComputerFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopHashTuplePartitionComputerFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopHashTuplePartitionComputerFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopHashTuplePartitionComputerFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopPartitionerTuplePartitionComputerFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopPartitionerTuplePartitionComputerFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopPartitionerTuplePartitionComputerFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/HadoopPartitionerTuplePartitionComputerFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyBinaryComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyBinaryComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyBinaryComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyBinaryComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/KeyComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingBinaryComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingBinaryComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingBinaryComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingBinaryComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingComparatorFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingComparatorFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingComparatorFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/data/WritableComparingComparatorFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/ClasspathBasedHadoopClassFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/ClasspathBasedHadoopClassFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/ClasspathBasedHadoopClassFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/ClasspathBasedHadoopClassFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DatatypeHelper.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DatatypeHelper.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DatatypeHelper.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DatatypeHelper.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DuplicateKeyMapper.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DuplicateKeyMapper.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DuplicateKeyMapper.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/DuplicateKeyMapper.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopAdapter.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopAdapter.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopAdapter.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopAdapter.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopFileSplit.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopFileSplit.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopFileSplit.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/HadoopFileSplit.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/IHadoopClassFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/IHadoopClassFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/IHadoopClassFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/IHadoopClassFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/PreappendLongWritableMapper.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/PreappendLongWritableMapper.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/PreappendLongWritableMapper.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/hadoop/util/PreappendLongWritableMapper.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/GraceHashJoinOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/GraceHashJoinOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/GraceHashJoinOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/GraceHashJoinOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoin.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoin.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoin.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoin.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoinOperatorDescriptor.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoinOperatorDescriptor.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoinOperatorDescriptor.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/join/InMemoryHashJoinOperatorDescriptor.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/ReflectionBasedMapperFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/ReflectionBasedMapperFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/ReflectionBasedMapperFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/ReflectionBasedMapperFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/SamplerMapFactory.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/SamplerMapFactory.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/SamplerMapFactory.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/map/SamplerMapFactory.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/DeserializedOperatorNodePushable.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/DeserializedOperatorNodePushable.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/DeserializedOperatorNodePushable.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/DeserializedOperatorNodePushable.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferenceEntry.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferenceEntry.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferenceEntry.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferenceEntry.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferencedPriorityQueue.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferencedPriorityQueue.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferencedPriorityQueue.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/ReferencedPriorityQueue.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBuffer.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBuffer.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBuffer.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBuffer.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataReader.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataReader.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataReader.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataReader.java
diff --git a/hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataWriter.java b/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataWriter.java
similarity index 100%
rename from hyracks-core/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataWriter.java
rename to hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/util/SynchronizedBoundedBufferDataWriter.java
diff --git a/hyracks-server/.classpath b/hyracks-server/.classpath
new file mode 100644
index 0000000..f2cc5f7
--- /dev/null
+++ b/hyracks-server/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/hyracks-server/.project b/hyracks-server/.project
new file mode 100644
index 0000000..89dd035
--- /dev/null
+++ b/hyracks-server/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>hyracks-server</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/hyracks-server/.settings/org.eclipse.jdt.core.prefs b/hyracks-server/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..e5faa3a
--- /dev/null
+++ b/hyracks-server/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,6 @@
+#Thu Jul 29 15:30:35 PDT 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/hyracks-server/.settings/org.maven.ide.eclipse.prefs b/hyracks-server/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..6b45873
--- /dev/null
+++ b/hyracks-server/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Thu Jul 29 15:30:15 PDT 2010
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/hyracks-core/data/dblp.txt b/hyracks-server/data/dblp.txt
similarity index 100%
rename from hyracks-core/data/dblp.txt
rename to hyracks-server/data/dblp.txt
diff --git a/hyracks-core/data/tpch0.001/customer-part1.tbl b/hyracks-server/data/tpch0.001/customer-part1.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/customer-part1.tbl
rename to hyracks-server/data/tpch0.001/customer-part1.tbl
diff --git a/hyracks-core/data/tpch0.001/customer-part2.tbl b/hyracks-server/data/tpch0.001/customer-part2.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/customer-part2.tbl
rename to hyracks-server/data/tpch0.001/customer-part2.tbl
diff --git a/hyracks-core/data/tpch0.001/customer.tbl b/hyracks-server/data/tpch0.001/customer.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/customer.tbl
rename to hyracks-server/data/tpch0.001/customer.tbl
diff --git a/hyracks-core/data/tpch0.001/lineitem.tbl b/hyracks-server/data/tpch0.001/lineitem.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/lineitem.tbl
rename to hyracks-server/data/tpch0.001/lineitem.tbl
diff --git a/hyracks-core/data/tpch0.001/nation.tbl b/hyracks-server/data/tpch0.001/nation.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/nation.tbl
rename to hyracks-server/data/tpch0.001/nation.tbl
diff --git a/hyracks-core/data/tpch0.001/orders-part1.tbl b/hyracks-server/data/tpch0.001/orders-part1.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/orders-part1.tbl
rename to hyracks-server/data/tpch0.001/orders-part1.tbl
diff --git a/hyracks-core/data/tpch0.001/orders-part2.tbl b/hyracks-server/data/tpch0.001/orders-part2.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/orders-part2.tbl
rename to hyracks-server/data/tpch0.001/orders-part2.tbl
diff --git a/hyracks-core/data/tpch0.001/orders.tbl b/hyracks-server/data/tpch0.001/orders.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/orders.tbl
rename to hyracks-server/data/tpch0.001/orders.tbl
diff --git a/hyracks-core/data/tpch0.001/part.tbl b/hyracks-server/data/tpch0.001/part.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/part.tbl
rename to hyracks-server/data/tpch0.001/part.tbl
diff --git a/hyracks-core/data/tpch0.001/partsupp.tbl b/hyracks-server/data/tpch0.001/partsupp.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/partsupp.tbl
rename to hyracks-server/data/tpch0.001/partsupp.tbl
diff --git a/hyracks-core/data/tpch0.001/region.tbl b/hyracks-server/data/tpch0.001/region.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/region.tbl
rename to hyracks-server/data/tpch0.001/region.tbl
diff --git a/hyracks-core/data/tpch0.001/supplier.tbl b/hyracks-server/data/tpch0.001/supplier.tbl
similarity index 100%
rename from hyracks-core/data/tpch0.001/supplier.tbl
rename to hyracks-server/data/tpch0.001/supplier.tbl
diff --git a/hyracks-core/data/tpch0.001/tpch.ddl b/hyracks-server/data/tpch0.001/tpch.ddl
similarity index 100%
rename from hyracks-core/data/tpch0.001/tpch.ddl
rename to hyracks-server/data/tpch0.001/tpch.ddl
diff --git a/hyracks-core/data/words.txt b/hyracks-server/data/words.txt
similarity index 100%
rename from hyracks-core/data/words.txt
rename to hyracks-server/data/words.txt
diff --git a/hyracks-server/pom.xml b/hyracks-server/pom.xml
new file mode 100644
index 0000000..0cdd030
--- /dev/null
+++ b/hyracks-server/pom.xml
@@ -0,0 +1,94 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>edu.uci.ics.hyracks</groupId>
+  <artifactId>hyracks-server</artifactId>
+  <version>0.0.5-SNAPSHOT</version>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.0.2</version>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <forkMode>pertest</forkMode>
+          <argLine>-enableassertions</argLine>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>appassembler-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <configuration>
+              <programs>
+                <program>
+                  <mainClass>edu.uci.ics.hyracks.driver.CCDriver</mainClass>
+                  <name>hyrackscc</name>
+                </program>
+                <program>
+                  <mainClass>edu.uci.ics.hyracks.driver.NCDriver</mainClass>
+                  <name>hyracksnc</name>
+                </program>
+              </programs>
+              <repositoryLayout>flat</repositoryLayout>
+              <repositoryName>lib</repositoryName>
+            </configuration>
+            <phase>package</phase>
+            <goals>
+              <goal>assemble</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>2.2-beta-5</version>
+        <executions>
+          <execution>
+            <configuration>
+              <descriptors>
+                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
+                <descriptor>src/main/assembly/source-assembly.xml</descriptor>
+              </descriptors>
+            </configuration>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+  	<dependency>
+  		<groupId>junit</groupId>
+  		<artifactId>junit</artifactId>
+  		<version>4.8.1</version>
+  		<type>jar</type>
+  		<scope>test</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>edu.uci.ics.hyracks</groupId>
+  		<artifactId>hyracks-dataflow-std</artifactId>
+  		<version>0.1.0</version>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>edu.uci.ics.hyracks</groupId>
+  		<artifactId>hyracks-core</artifactId>
+  		<version>0.1.0</version>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  </dependencies>
+</project>
diff --git a/hyracks-core/src/main/assembly/binary-assembly.xml b/hyracks-server/src/main/assembly/binary-assembly.xml
similarity index 100%
rename from hyracks-core/src/main/assembly/binary-assembly.xml
rename to hyracks-server/src/main/assembly/binary-assembly.xml
diff --git a/hyracks-core/src/main/assembly/source-assembly.xml b/hyracks-server/src/main/assembly/source-assembly.xml
similarity index 100%
rename from hyracks-core/src/main/assembly/source-assembly.xml
rename to hyracks-server/src/main/assembly/source-assembly.xml
diff --git a/hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/comm/SerializationDeserializationTest.java b/hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/comm/SerializationDeserializationTest.java
similarity index 100%
rename from hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/comm/SerializationDeserializationTest.java
rename to hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/comm/SerializationDeserializationTest.java
diff --git a/hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/AbstractIntegrationTest.java b/hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/AbstractIntegrationTest.java
similarity index 100%
rename from hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/AbstractIntegrationTest.java
rename to hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/AbstractIntegrationTest.java
diff --git a/hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/CountOfCountsTest.java b/hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/CountOfCountsTest.java
similarity index 100%
rename from hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/CountOfCountsTest.java
rename to hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/CountOfCountsTest.java
diff --git a/hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/ScanPrintTest.java b/hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/ScanPrintTest.java
similarity index 100%
rename from hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/ScanPrintTest.java
rename to hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/ScanPrintTest.java
diff --git a/hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/SortMergeTest.java b/hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/SortMergeTest.java
similarity index 100%
rename from hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/SortMergeTest.java
rename to hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/SortMergeTest.java
diff --git a/hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/TPCHCustomerOrderHashJoinTest.java b/hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/TPCHCustomerOrderHashJoinTest.java
similarity index 100%
rename from hyracks-core/src/test/java/edu/uci/ics/hyracks/tests/integration/TPCHCustomerOrderHashJoinTest.java
rename to hyracks-server/src/test/java/edu/uci/ics/hyracks/tests/integration/TPCHCustomerOrderHashJoinTest.java
diff --git a/pom.xml b/pom.xml
index 4346027..f251ebc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,9 @@
 
   <modules>
     <module>hyracks-api</module>
+    <module>hyracks-dataflow-common</module>
+    <module>hyracks-dataflow-std</module>
     <module>hyracks-core</module>
+    <module>hyracks-server</module>
   </modules>
 </project>