diff --git a/sdc-plugin/buffers.cc b/sdc-plugin/buffers.cc
index 072efe1..125b549 100644
--- a/sdc-plugin/buffers.cc
+++ b/sdc-plugin/buffers.cc
@@ -18,7 +18,6 @@
 #include "buffers.h"
 
 const std::vector<std::string> Pll::inputs = {"CLKIN1", "CLKIN2"};
-const std::vector<std::string> Pll::outputs = {"CLKOUT0", "CLKOUT1", "CLKOUT2",
-                                               "CLKOUT3", "CLKOUT4", "CLKOUT5"};
-const float Pll::delay = 1;
+const std::vector<std::string> Pll::outputs = {"CLKOUT0", "CLKOUT1", "CLKOUT2", "CLKOUT3", "CLKOUT4", "CLKOUT5"};
+const float Pll::delay = 0;
 const std::string Pll::name = "PLLE2_ADV";
diff --git a/sdc-plugin/clocks.cc b/sdc-plugin/clocks.cc
index c7f6e9d..dc1dbcf 100644
--- a/sdc-plugin/clocks.cc
+++ b/sdc-plugin/clocks.cc
@@ -33,9 +33,11 @@
                      [&](Clock& clock) { return clock.Name() == name; });
     if (clock != clocks_.end()) {
 	log("Clock %s already exists and will be overwritten\n", name.c_str());
-	clocks_.erase(clock);
+	clock->UpdateClock(wire, period, rising_edge, falling_edge);
+    } else {
+	log("Inserting clock %s with period %f, r:%f, f:%f\n", name.c_str(), period, rising_edge, falling_edge);
+	clocks_.emplace_back(name, wire, period, rising_edge, falling_edge);
     }
-    clocks_.emplace_back(name, wire, period, rising_edge, falling_edge);
 }
 
 void Clocks::AddClock(Clock& clock) {
@@ -145,9 +147,11 @@
                                     Buffer buffer) {
     auto clock_wires = clock.GetClockWires();
     for (auto clock_wire : clock_wires) {
-	log("%s\n", clock_wire->name.c_str());
-	auto buf_wires = pass->FindSinkWiresForCellType(clock_wire, buffer.name,
-	                                                buffer.output);
+#ifdef SDC_DEBUG
+	log("Clock wire %s\n", RTLIL::unescape_id(clock_wire->name).c_str());
+#endif
+	auto buf_wires = pass->FindSinkWiresForCellType(
+	    clock_wire, buffer.name, buffer.output);
 	int path_delay(0);
 	for (auto wire : buf_wires) {
 #ifdef SDC_DEBUG
@@ -204,6 +208,18 @@
     }
 }
 
+void Clock::UpdateClock(RTLIL::Wire* wire, float period, float rising_edge, float falling_edge) {
+    UpdateWires(wire);
+    UpdatePeriod(period);
+    UpdateWaveform(rising_edge, falling_edge);
+}
+
+void Clock::UpdateWires(RTLIL::Wire* wire) {
+    if (std::find(clock_wires_.begin(), clock_wires_.end(), wire) == clock_wires_.end()) {
+	clock_wires_.push_back(wire);
+    }
+}
+
 void Clock::UpdatePeriod(float period) {
     period_ = period;
     rising_edge_ = 0;
diff --git a/sdc-plugin/clocks.h b/sdc-plugin/clocks.h
index 97fe75c..d98d5b4 100644
--- a/sdc-plugin/clocks.h
+++ b/sdc-plugin/clocks.h
@@ -41,8 +41,7 @@
     float Period() { return period_; }
     float RisingEdge() { return rising_edge_; }
     float FallingEdge() { return falling_edge_; }
-    void UpdatePeriod(float period);
-    void UpdateWaveform(float rising_edge, float falling_edge);
+    void UpdateClock(RTLIL::Wire* wire, float period, float rising_edge, float falling_edge);
 
    private:
     std::string name_;
@@ -50,6 +49,10 @@
     float period_;
     float rising_edge_;
     float falling_edge_;
+
+    void UpdateWires(RTLIL::Wire* wire);
+    void UpdatePeriod(float period);
+    void UpdateWaveform(float rising_edge, float falling_edge);
 };
 
 class Clocks {
diff --git a/sdc-plugin/sdc.cc b/sdc-plugin/sdc.cc
index d158e5b..73eec15 100644
--- a/sdc-plugin/sdc.cc
+++ b/sdc-plugin/sdc.cc
@@ -104,6 +104,7 @@
                  RTLIL::Design* design) override {
 	size_t argidx;
 	std::string name;
+	bool is_waveform_specified(false);
 	float rising_edge(0);
 	float falling_edge(0);
 	float period(0);
@@ -126,6 +127,7 @@
 		             [](char c) { return c != '{' or c != '}'; });
 		std::stringstream ss(edges);
 		ss >> rising_edge >> falling_edge;
+		is_waveform_specified = true;
 		continue;
 	    }
 	    break;
@@ -159,6 +161,10 @@
 	if (name.empty()) {
 	    name = RTLIL::unescape_id(selected_wires.at(0)->name);
 	}
+	if (!is_waveform_specified) {
+	    rising_edge = 0;
+	    falling_edge = period / 2;
+	}
 	clocks_.AddClock(name, selected_wires, period, rising_edge,
 	                 falling_edge);
 	log("Created clock %s with period %f, waveform {%f %f}\n", name.c_str(),
