 
 (defun skewer-css-end-of-rule ()
   "Move to the end of the current rule and return point."
-  (re-search-forward "}"))
+  (if (eql (char-before) ?})
+      (point)
+    (re-search-forward "}")))
+
+(defun skewer-css-end-of-declaration ()
+  "Move to the end of the current declaration and return point."
+  (if (eql (char-before) ?\;)
+      (point)
+    (re-search-forward ";")))
+
+(defun skewer-css-beginning-of-declaration ()
+  "Move to the end of the current declaration and return point."
+  (skewer-css-end-of-declaration)
+  (re-search-backward ":")
+  (css-backward-sexp 1)
+  (point))
 
 (defun skewer-css-selectors ()
   "Return the selectors for the current rule."

(defun skewer-css-eval-current-declaration ()
  "Evaluate the declaration at the point."
  (interactive)
  (let ((selectors (skewer-css-selectors))
        (rule (skewer-css-declaration)))
    (skewer-css (apply #'format "%s { %s: %s }" selectors rule))))

(defun skewer-css-eval-current-rule ()
  "Evaluate the rule at the point."

    (let* ((start (skewer-css-beginning-of-rule))
           (end (skewer-css-end-of-rule))
           (rule (buffer-substring-no-properties start end)))
      (skewer-flash-region start end)
      (skewer-css (skewer-css-trim rule)))))

(defun skewer-css-eval-buffer ()
