diff --git a/pylonwrapper.cpp b/pylonwrapper.cpp
index f9b8913..c8ca30a 100644
--- a/pylonwrapper.cpp
+++ b/pylonwrapper.cpp
@@ -82,6 +82,26 @@ bool PylonWrapper::exposureTime(double exposure_time) {
     return false;
 }
 
+double PylonWrapper::gain() {
+  double gain = -1.;
+  if (valid) {
+      GenApi::INodeMap& nodemap = camera->GetNodeMap();
+      GenApi::INode* n = nodemap.GetNode( "Gain" );
+      Pylon::CFloatParameter detector_gain( n );
+      gain = detector_gain.GetValue();
+    }
+  return gain;
+}
+
+bool PylonWrapper::gain(double gain_db) {
+    if (valid) {
+        GenAPI::INodeMap& nodemap = camera.GetNodeMap();
+        GenAPI::CFloatPtr(nodemap.GetNode("Gain"))->SetValue(gain_db);
+        return true;
+      }
+    return false;
+}
+
 ImageSettings PylonWrapper::getImageSettings() {
   ImageSettings settings;
   if (valid) {
diff --git a/pylonwrapper.h b/pylonwrapper.h
index f2e5e24..e4d6e7b 100644
--- a/pylonwrapper.h
+++ b/pylonwrapper.h
@@ -29,6 +29,8 @@ public:
     double maxFrameRate();
     double exposureTime();
     bool exposureTime(double exposure_time);
+    double gain();
+    bool gain(double gain_db);
     Pylon::CInstantCamera *getCamera();
 
 private: