avoid coping coords and unsafe accessing memory
diff --git a/README.md b/README.md
index 20fff39..d9cf77e 100644
--- a/README.md
+++ b/README.md
@@ -16,12 +16,16 @@
 ```CPP
 #include "delaunator.h"
 #include  <cstdio>
-
+using namespace std;
 //...
 int main(int, char* argv[]) {
     //...
     const vector<double> coords = {/* x0, y0, x1, y1, ... */};
-    Delaunator delaunator(coords); //triangulation happens here
+
+    //triangulation happens here
+    //note moving points to constructor
+    Delaunator delaunator(move(coords));
+
     for(long int i = 0; i < delaunator.triangles.size(); i+=3) {
         printf(
             "Triangle points: [[%f, %f], [%f, %f], [%f, %f]]\n",
diff --git a/src/delaunator.cpp b/src/delaunator.cpp
index 8600b09..d37d5a5 100644
--- a/src/delaunator.cpp
+++ b/src/delaunator.cpp
@@ -136,7 +136,7 @@
     }
 }
 
-Delaunator::Delaunator(const vector<double> &in_coords) {
+Delaunator::Delaunator(vector<double> in_coords) {
     coords = move(in_coords);
     const long int n = coords.size() >> 1;
     double max_x = -1 * max_double;
diff --git a/src/delaunator.h b/src/delaunator.h
index 2f3e705..a95b871 100644
--- a/src/delaunator.h
+++ b/src/delaunator.h
@@ -16,7 +16,7 @@
 
 class Delaunator{
     public:
-        Delaunator(const std::vector<double> &in_coords);
+        Delaunator(std::vector<double> in_coords);
         std::vector<unsigned long int> triangles;
         std::vector<long int> halfedges;
         std::vector<double> coords;
diff --git a/src/triangulate.cpp b/src/triangulate.cpp
index fba4dec..fa6d575 100644
--- a/src/triangulate.cpp
+++ b/src/triangulate.cpp
@@ -45,7 +45,7 @@
         return coords;
     }
 
-    const char* serialize_to_json(Delaunator &delaunator) {
+    const string serialize_to_json(Delaunator &delaunator) {
         rapidjson::StringBuffer sb;
         rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
         writer.StartObject();
@@ -93,7 +93,7 @@
                     }
                 writer.EndArray();
         writer.EndObject();
-        return sb.GetString();
+        return string(sb.GetString());
     }
 }
 
@@ -103,8 +103,8 @@
     const char* output = argv[2];
     string json = read_file(filename);
     const vector<double> coords = get_geo_json_points(json);
-    Delaunator delaunator(coords);
-    const char* out_json = serialize_to_json(delaunator);
+    Delaunator delaunator(move(coords));
+    const char* out_json = serialize_to_json(delaunator).c_str();
 
     if (output) {
         printf("Writing to file %s", output);